C++ 数字和字段宽度的格式化输出,C++;你怎么说?

C++ 数字和字段宽度的格式化输出,C++;你怎么说?,c++,C++,此代码段: // // 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 << 1

此代码段:

//
// 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
的第二次打印未被截断以适合宽度为4的字段,Stroustrup解释说,这样做是正确的,因为具有正确数字的外观不好的表比具有错误数字的外观好的表要好

< C++标准对这个行为说什么?

我发现
ios\u base::width
标准上说:

要在特定字段上生成的最小字段宽度(字符数) 输出转换


“最小值”是这里用来解释上述行为的关键词吗?

您引用的陈述是一个一般性描述。不管是什么 作为输出,该字段将至少有那么多字符;就是 最小值的含义。字段的确切含义取决于 正在输出的数据类型。在整数输出的情况下,精确的 第22.4.2.2条规定了格式;这不仅包括宽度 字段被解释,并保证字段不会变大 除非需要按照规定的格式显示值, 但也要知道填充使用什么字符,以及放在哪里。 (Stroustrup的示例将所有其他参数保留为 默认值,但如果您有一个负数,并指定了填充 字符“0”,您不希望它产生
|000-1234
,但是 而是
|-0001234 |

对于用户定义的类型,字段完全可能包含 小于最小值。我会认为这是一个错误,但我想象了很多。
对于用户定义的
,您引用的语句是通用描述。不管是什么
作为输出,该字段将至少有那么多字符;就是
最小值的含义。字段的确切含义取决于
正在输出的数据类型。在整数输出的情况下,精确的
第22.4.2.2条规定了格式;这不仅包括宽度
字段被解释,并保证字段不会变大
除非需要按照规定的格式显示值,
但也要知道填充使用什么字符,以及放在哪里。
(Stroustrup的示例将所有其他参数保留为
默认值,但如果您有一个负数,并指定了填充
字符“0”,您不希望它产生
|000-1234
,但是 而是
|-0001234 |

对于用户定义的类型,字段完全可能包含 小于最小值。我会认为这是一个错误,但我想象了很多。 对于用户定义的
是,最小字段宽度意味着该字段至少有那么大,但可能更大。它并不意味着确切的字段宽度。是的,最小字段宽度意味着字段至少有那么大,但可能更大。它并不意味着精确的字段宽度。
123456|123456|  123456|123456|