3

これがうまくいく理由:

cout << "foo";

これはそうではありませんが?

(&cout)->operator<<("foo");

数値で問題なく動作するので、オーバーライドに関連するものだと思います。(MS Visual C++ コンパイラを使用しています。)

4

3 に答える 3

7

operator<<限られた数の型のみのメンバー関数として実装されています。他の型の場合、次のようなグローバル オーバーロードとして実装されます。

std::ostream &operator<<(std::ostream &os, T const &t) { 
    // write the data here
}

使用した構文は、グローバルとしてではなく、メンバー関数として実装されているオーバーロードでのみ機能します。

于 2012-04-06T19:27:17.817 に答える
1

coutオーバーロードされたメンバー関数がありますoperator<<(const void *)。これは引数 に最もよく一致します"foo"。(const char*は暗黙的に に変換されconst void*ます。) したがって、ポインターが出力されます。

// These call std::ostream& operator<<(std::ostream &os, const char * val)    
cout << "foo";
operator<<(cout,"foo");

// This calls cout's member function operator<<(const void * val)
(&cout)->operator<<("foo");
于 2012-04-06T19:59:08.583 に答える
0

出力を として取得するにはcout << "foo";、演算子をオーバーロードする必要があります<<

于 2012-04-06T19:32:42.773 に答える