9

std::endl が std::cout と std::wcout の両方で動作するかどうか疑問に思っていますか?

誰でもこれについて明確ですか?

4

1 に答える 1

14

はい。実際、テンプレートstd::endlの特殊化のマニピュレーターとして機能する関数テンプレートstd::basic_ostreamです。


詳細: 27.7.3.6 では、次のようにstd::basic_ostreamテンプレートにオーバーロードが含まれることが規定さoperator<<れています。

basic_ostream<charT, traits> &
operator<<(basic_ostream<charT, traits> (*pf)(basic_ostream<charT, traits> &));

適切な関数でこのオーバーロードを呼び出すと、次のような効果がありreturn pf(*this)ます。つまりstd::cout << std::endl、これは実際std::endl(std::cout)にはストリーム オブジェクトへの参照になり、それを返します。

他のすべての ostream マニピュレータは同じ方法で記述され、入力マニピュレータについても同様です。


endl関数テンプレートの魔法はwiden('\n')、指定された文字タイプの正しい「改行」データを生成する への呼び出しです。

于 2012-12-01T13:19:39.883 に答える