6

coutフラグがstd::ios_base::skipwsありstd::ios_base::dec、デフォルトで設定されています

これは次のコードで確認できます。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    ios_base::fmtflags flags = cout.flags();
    string sflags;

    if( flags & ios_base::skipws ) sflags += "skipws";
    if( flags & ios_base::unitbuf ) sflags += sflags.empty() ? "unitbuf" : " unitbuf";
    if( flags & ios_base::uppercase ) sflags += sflags.empty() ? "uppercase" : " uppercase";
    if( flags & ios_base::showbase ) sflags += sflags.empty() ? "showbase" : " showbase";
    if( flags & ios_base::showpoint ) sflags += sflags.empty() ? "showpoint" : " showpoint";
    if( flags & ios_base::showpos ) sflags += sflags.empty() ? "showpos" : " showpos";
    if( flags & ios_base::left ) sflags += sflags.empty() ? "left" : " left";
    if( flags & ios_base::right ) sflags += sflags.empty() ? "right" : " right";
    if( flags & ios_base::internal ) sflags += sflags.empty() ? "internal" : " internal";
    if( flags & ios_base::dec ) sflags += sflags.empty() ? "dec" : " dec";
    if( flags & ios_base::oct ) sflags += sflags.empty() ? "oct" : " oct";
    if( flags & ios_base::hex ) sflags += sflags.empty() ? "hex" : " hex";
    if( flags & ios_base::scientific ) sflags += sflags.empty() ? "scientific" : " scientific";
    if( flags & ios_base::fixed ) sflags += sflags.empty() ? "fixed" : " fixed";
    if( flags & ios_base::hexfloat ) sflags += sflags.empty() ? "hexfloat" : " hexfloat";
    if( flags & ios_base::boolalpha ) sflags += sflags.empty() ? "boolalpha" : " boolalpha";
    if( flags & ios_base::_Stdio ) sflags += sflags.empty() ? "_Stdio" : " _Stdio";

    cout << "Standard flags from cout stream: " << sflags << endl;
}

明らかに、旗std::ios_base::skipwsはcoutとは無関係です。

4

2 に答える 2

6

フラグとそのデフォルト設定は、入力ストリームと出力ストリームの両方の共通基本クラスであるstd::ios_base(実際には、設定はstd::basic_ios<cT, Traits>27.5.5.2 [basic.ios.cons]で定義されています)から継承されます。ストリームが入力ストリームと出力ストリームの両方から継承する場合、フラグは共有されます。入力ストリームまたは出力ストリームのどちらでもあまり意味をなさない他のフラグがあります。

于 2012-12-30T17:36:53.813 に答える
1

skipwsフラグは、初期化時にすべての標準ストリームに設定されます。だけではありませんstd::coutstd::cout他のストリームと同じくらい意味があります。noskipwsあなたがそれをとても嫌うなら、あなたはそれを無効にすることができます。

于 2012-12-30T17:31:01.513 に答える