有人能给我解释一下 setw 操纵器的声明吗?我试图理解它时完全被震惊了。! iomanip中setw的声明如下
smanip setw(int)
现在什么是 smanip?当我们给出 std::cout << setw(10) << "Hai"时会发生什么[我想知道 setw 实际上如何影响输出,换句话说,幕后发生的操作)
最佳答案
smanip
是实现定义的类型。只要工作完成,库就可以将其定义或 typedef 为任何它喜欢的内容。
实际上,它将是某种结构,表示(a)要执行的操作,以及(b)参数 10
用于此操作。它可能还有一个执行操作的函数,也可能没有,具体取决于实现如何定义 operator<<(ostream &, smanip)
,或一些类似的重载来捕获必要的操作数类型。我还没有检查我的实现来找出答案。
至于输出如何受到影响:my_stream << setw(10)
被定义为对流具有与调用 my_stream.width(10)
相同的效果。所以operator<<
重载将确保以某种特定于实现的方式发生。非参数化流操纵器的运算符重载专门定义为调用操纵器,但带有 smanip
实现有更多的自由度。
关于c++ - 为什么cout返回smanip?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4659113/