谁能解释一下 setw 操纵器的声明?我完全被吹走了试图理解它。!iomanip中setw的声明如下
smanip setw(int)
现在什么是smanip?当我们给 std::cout << setw(10) << "Hai" [我想知道输出实际上是如何受 setw 影响的,换句话说,在幕后发生的动作会发生什么)
smanip
是实现定义的类型。只要工作完成,库就可以将其定义或定义为它喜欢的任何内容。
在实践中,它将是某种结构,表示 (a) 要执行的操作,以及 (b)10
要在此操作中使用的参数。它也可能有一个函数来执行操作,或者它可能没有,这取决于实现如何定义operator<<(ostream &, smanip)
,或者一些类似的重载来捕获必要的操作数类型。我还没有检查我的实现以找出答案。
至于输出如何受到影响:my_stream << setw(10)
被定义为对流产生与调用相同的效果my_stream.width(10)
。因此,operator<<
重载将确保以某种特定于实现的方式发生。非参数化流操纵器的运算符重载是专门为调用操纵器而定义的,但smanip
实现的自由度更高。
setw(int)
本身不会修改任何东西。它只是返回一个流操纵器(smanip),可用于修改流的行为。
// setw example
#include <iostream>
#include <iomanip>
using namespace std;
int main () {
cout << setw (10);
cout << 77 << endl;
return 0;
}