有人能解释一下setw操纵器的声明吗?我完全被试图了解它。 iomanip中setw的声明如下
smanip setw(int)
现在什么是smanip?当我们给std :: cout<< setw(10)<< “Hai”[我想知道输出实际上是如何受到setw的影响,换句话说就是发生在幕后的行为)
答案 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;
}