为什么cout会回归smanip?

时间:2011-01-11 15:15:16

标签: c++ iomanip

有人能解释一下setw操纵器的声明吗?我完全被试图了解它。 iomanip中setw的声明如下

 smanip setw(int)

现在什么是smanip?当我们给std :: cout<< setw(10)<< “Hai”[我想知道输出实际上是如何受到setw的影响,换句话说就是发生在幕后的行为)

2 个答案:

答案 0 :(得分:4)

smanip是一种实现定义的类型。只要作业完成,图书馆就可以定义或键入任何它喜欢的东西。

在实践中,它将是某种结构,表示(a)要执行的操作,以及(b)在此操作中使用的参数10。它可能还有一个执行操作的函数,或者它可能没有,这取决于实现如何定义operator<<(ostream &, smanip),或者一些类似的重载来捕获必要的操作数类型。我没有检查我的实现以找出答案。

关于输出如何受到影响:my_stream << setw(10)被定义为对流具有与调用my_stream.width(10)相同的效果。因此operator<<重载将确保以某种特定于实现的方式发生。非参数化流操作符的操作符重载是专门为调用操作符而定义的,但是smanip有更多的实现自由。

答案 1 :(得分:0)

setw(int)本身不会修改任何内容。它只返回一个流操纵器(smanip),可用于修改流的行为。

// setw example
#include <iostream>
#include <iomanip>
using namespace std;

int main () {
  cout << setw (10);
  cout << 77 << endl;
  return 0;
}