web-dev-qa-db-ja.com

ostream&operator <<(...)のようにクラス名の後に使用する場合のアンパサンドは何ですか?

私はポインタについてすべて知っています。アンパサンドは「アドレス」を意味しますが、この状況ではどういう意味ですか?

また、演算子をオーバーロードするときに、constでパラメーターを宣言するのが一般的であるのはなぜですか?

24
Omar

その場合、ostreamオブジェクトへの参照を返します。アンパサンドを「アドレス」として厳密に考えると、必ずしもうまくいくとは限りません。 ここ C++からのいくつかの情報FAQ参照に関するLite。

Constに関する限り、constの正確性は、C++型の安全性において非常に重要であり、できる限りやりたいことがあります。 FAQからの別の ページ はその点で役立ちます。constは、予期しない状況でデータを台無しにする副作用関連の変更からあなたを助けます。

15
Kyle Walsh

アンパサンドのコンテキストに応じて、2つの異なる意味を持つ可能性があります。あなたの特定の質問に対する答えは、それが「の住所」ではなく、参照であるということです。それらは非常に異なるものです。違いを理解することは非常に重要です。

C++リファレンス

パラメーターをconstにする理由は、パラメーターが関数によって変更されないようにするためです。これにより、関数の呼び出し元が渡すパラメーターが変更されないことが保証されます。

7
nathan

C++型宣言では、アンパサンドは「参照」を意味します。この場合、operator <<ostreamオブジェクトへの参照を返します。

実際には*thisを返すため、実際には同じostreamオブジェクトであり、次のようにoperator <<への呼び出しをチェーンできることを意味します。

os << "Hello" << " " << "World" << endl;
4
Roger Lipscombe

これは、変数が参照であることを意味します。ポインタのようなものですが、実際にはそうではありません。

参照: 参照(C++)

3
Jesper