あなたはそれを正確に綴りませんでしたが、あなたの混乱はそれがstd::cout
関数であると考えていることであり、なぜこのように呼び出さないのか疑問に思っていると思います:
std::cout("Hello World");
まあ、std::cout
関数ではありません。このステートメントの機能は ですoperator<<
。
std::cout << "Hello World";
または、より具体的には、関数はstd::ostream::operator<<(const char*)
.
理解する必要があるのは、演算子は別の呼び出し構文を持つ関数にすぎないということです。 operator<<
のメンバー関数としてオーバーロードされ、std::ostream
のstd::cout
オブジェクトですstd::ostream
。したがって、この:
std::cout << "Hello World";
これを呼び出す別の方法は次のとおりです。
std::cout.operator<<("Hello World");
は二項演算子であることに注意してください。つまりoperator<<
、フリー関数として宣言されている場合は 2 つの引数を取り、メンバー関数として宣言されている場合は 1 つの引数を取ります。別の呼び出し構文を使用する場合、左側のオブジェクトが最初の引数で、右側のオブジェクトが 2 番目の引数です。このようにメンバ関数として宣言されている場合は、左側のオブジェクトが呼び出しオブジェクト、右側のオブジェクトが引数になります。
フリー関数として宣言すると、次のようになります。
operator<<(std::cout, "Hello World");
ただし、メンバーまたはフリー関数として宣言されているかどうかにかかわらず、同じ代替呼び出し構文を引き続き使用できます。