2

谁能解释一下 setw 操纵器的声明?我完全被吹走了试图理解它。!iomanip中setw的声明如下

 smanip setw(int)

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

4

2 回答 2

4

smanip是实现定义的类型。只要工作完成,库就可以将其定义或定义为它喜欢的任何内容。

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

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

于 2011-01-11T15:37:15.683 回答
0

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

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

int main () {
  cout << setw (10);
  cout << 77 << endl;
  return 0;
}
于 2011-01-11T15:18:24.520 回答