簡體   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