繁体   English   中英

数字和字段宽度的格式化输出,C ++标准对此有何说明?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM