私はポインタについてすべてを知っています。アンパサンドは「アドレス」を意味しますが、この状況ではどういう意味ですか?ostream&operator <<(...)のようなクラス名の後に使用する場合のアンパサンドは何ですか?
また、演算子のオーバーロード時に、なぜconstを使用してパラメータを宣言するのが普通ですか?
私はポインタについてすべてを知っています。アンパサンドは「アドレス」を意味しますが、この状況ではどういう意味ですか?ostream&operator <<(...)のようなクラス名の後に使用する場合のアンパサンドは何ですか?
また、演算子のオーバーロード時に、なぜconstを使用してパラメータを宣言するのが普通ですか?
これは、変数が参照であることを意味します。これはポインタのようなものですが、実際はそうではありません。
参照:C++型宣言においてReference (C++)
、アンパサンドは、 "基準" を意味します。この場合、operator <<
はostream
オブジェクトへの参照を返します。
それは実際に*this
を返すので、それは実際には同じostream
オブジェクトだ、とあなたはこれに似operator <<
にチェーンコール、できることを意味します:あなたはのostreamオブジェクトへの参照を、その場合には
os << "Hello" << " " << "World" << endl;
アンパサンドの文脈によっては、2つの異なることを意味する可能性があります。あなたの特定の質問への答えは、それが参照であり、 "のアドレス"ではないということです。彼らは非常に異なるものです。違いを理解することは非常に重要です。パラメータのconstを作るために
理由は、関数によって変更されないようにすることです。これにより、関数の呼び出し元は、渡されるパラメーターが変更されないことが保証されます。
ほとんどのプログラマが実装している 'operator <<'は、メンバ関数ではないフリー関数なので、 'this'は含まれていません。 – sbi