为什么某些C++标准库“运算符<<”函数将其流宽度重置为 0
Why do some C++ standard library `operator<<` functions reset their streams width to 0?
如C++标准的[ostream.inserters.character]
部分所述,将char
或字符串插入流后,流的宽度设置为0:
template<class traits>
basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>& out,
const unsigned char* s);
Do lots of sensible and expected things...
Calls width(0).
为什么C++标准规定了对width(0)
的呼吁?
更改流宽度而不将其重置为其原始值的理由是什么?(据我所知,流的所有其他属性都由流插入运算符保留。
这里有一个相关的问题,它证明了这造成的混乱,但没有解释为什么标准规定这种行为。
它似乎不是"一些"operator<<
函数,一般来说 插入器和提取器 (21.4.8.9)。参见 C++ 标准和 Tony D 答案中的合理推理
相关文章:
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 在 C++ 中调用类中的运算符函数
- 错误 C2676:std::set::const_iterator 没有运算符 + 函数?
- 为什么 ADL 的运算符函数行为与其他函数不同?
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 第二个常量在运算符函数中做什么?
- 重载赋值运算符函数和复制构造函数中的错误
- 内置类型的运算符函数
- 如何调用运算符函数添加两个对象?
- Const 仍然允许在运算符函数 c++ 下进行更改
- 在呼叫运算符函数const中调用运算符时错误
- 是否有一种方法可以在超载运算符函数中接触默认运算符函数
- 重载时获取堆栈溢出 >> 运算符函数是为类调用的。我需要进行哪些更改?
- 运算符 [] 函数的实现是如何工作的
- C++:使用父类运算符函数更新子类对象的继承变量
- 创建一个接受 2 个输入参数的文本运算符函数
- 为什么找不到重载运算符函数?
- 为什么auto_ptr中有模板复制构造函数和覆盖运算符函数
- 为什么某些C++标准库“运算符<<”函数将其流宽度重置为 0
- C++SFINAE运算符/函数结果类型检查