[英]formatted output of a number and field width, where does the C++ standard say about it?
此代码段:
//
// This is example code from Chapter 11.2.5 "Fields" of
// "Programming -- Principles and Practice Using C++" by Bjarne Stroustrup
//
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout << 123456 // no field used
<<'|'<< setw(4) << 123456 << '|' // 123456 doesn't fit in a 4 char field
<< setw(8) << 123456 << '|' // set field width to 8
<< 123456 << "|\n"; // field sizes don't stick
}
产生以下输出:
123456|123456| 123456|123456|
第二张123456
文字不会被截断以适合宽度为4的字段,Stroustrup解释说这是正确的做法,因为数字正确的不良表比数字错误的良好表更好。
C ++标准对此行为怎么说?
我发现ios_base::width
标准说:
在某些输出转换中生成的最小字段宽度(字符数)
这里的关键字“ minimum”是用来解释所说行为的吗?
您引用的语句是一般性描述。 不管输出什么,该字段至少将具有那么多字符; 那就是最小的意思。 该字段的确切含义取决于输出的数据类型。 对于整数输出,确切的格式在§22.4.2.2中指定; 这不仅包括如何解释width字段,并保证该字段不会变大,除非有必要根据指定的格式显示该值,而且还包括用于填充的字符以及将其放在何处。 (Stroustrup的示例将所有其他参数|000-1234|
为其默认值,但是如果您使用负数并将其填充字符指定为'0',则不希望其导致|000-1234|
,而是|-0001234|
。)
对于用户定义的类型,该字段包含的内容可能少于最小值。 我会认为这是一个错误,但我想写了许多用户定义的<<
而不考虑任何格式化参数。 std::setw
的实际效果只是在std::basic_ios<char>
类中设置一个字段; 由<<
的实现来正确处理它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.