c++ - 为什么cout返回smanip?

标签 c++ iomanip

有人能给我解释一下 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/

相关文章:

c++ - 将十六进制转储值作为字符串传递

c++ - Qt设置QLineEdit的背景颜色

c++ - 为什么 `boost::multi_index replace`不能用于指针类型?

c++ - 如何使用 Gtk::Builder 将正确的 Glib::RefPtr 存储到非小部件

c++ - 似乎无法精确排列小数

c++ - 输出字符串用 C++ 在 Linux 中覆盖终端上的最后一个字符串

c++ - I/O 操纵器错误或 const ref 的临时生命周期延长?

c++ - iomanip 函数是如何实现的?

c++ - 使用 win32/C++ 检索多个显示信息

C++ 如何格式化包含可变整数的文本行,使其在给定宽度内右对齐?