とまったく同じであることがわかったので、明示的に呼び出しoperator<<
た場合にどうなるかについて単純に興味がありました。だから私はそれをします、そしてそれは何か奇妙なものを印刷します:std::cout
a.operator()
a()
#include <iostream>
using std::cout;
int main()
{
cout.operator<<("Hello World");
}
Output: 0x80486a0
奇妙なことに、それはアドレスを出力します(アドレスはあなたにとって異なるかもしれませんが、それでもアドレスでなければなりません)。これが文字列のアドレスだと思っているので、文字列を出力するために逆参照してみます。
*( cout.operator<<("Hello World") );
しかし、私は非常に長いエラーを受け取ります
no match for operator* in '*std::cout.std::basic_ostream<...
これはかなり変だと思います。std::cout
定義のどれも、これが異なる振る舞いを引き起こすと私に信じさせることはありません。また、演算子関数を明示的に呼び出しても違いはありません(または少なくともそうすべきです)。
では、なぜこの出力を取得するのですか?演算子を明示的に呼び出すときに、文字列自体ではなくアドレスを受け取るのはなぜですか?これはメモリ内のアドレスですか、それとも単なるガベージ出力ですか?どんな回答でも大歓迎です。