std::endl が std::cout と std::wcout の両方で動作するかどうか疑問に思っていますか?
誰でもこれについて明確ですか?
はい。実際、テンプレート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')
、指定された文字タイプの正しい「改行」データを生成する への呼び出しです。