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')、指定された文字タイプの正しい「改行」データを生成する への呼び出しです。