このメソッドで呼び出し元のオブジェクトが変更されていないことを示すには、クラスメソッドでキーワードconst
を使用する必要があります。しかし、後者の正確なセマンティクスは何ですか?私は3つのオプションを考えることができます:クラスメソッドは、constのすべきかとどのメソッドをconstにする必要がありますか?
- (最も弱い)それは、オブジェクトの店舗のビットとバイトを変更しない場合にのみ
- (強い)、それはオブジェクトを変更しません。 (1におけるように)、またはないオブジェクトによって所有され、参照オブジェクト
- (最強)それが参照するオブジェクトともしない任意のオブジェクト変更(それが所有されているかどうかを問わず)ない
"正しい"方法は何ですか?プログラミングコミュニティの間で共通の合意がありますか?
たとえば、標準ライブラリのコンテナのconstセマンティクスは、明らかに少なくとも2つを満たしています。他方、不思議なことにstd :: unique_ptrの*演算子は2も満たさない:constであるが、pointed to objectへの非const参照を返すが、オブジェクトはstd :: unique_ptrオブジェクト定義により。
もう一つの例:2続き
class X
{
private:
int& intref;
public:
X(int& intref): intref(intref) {};
void modifyRef(int& another) const
{
this->intref = another;
}
};
、法上のconstがオブジェクトによって所有されていないINTREF参照何か以来、okです。 3に続いて、constを削除する必要があります。
「constキーワードを示すために、クラスメソッドで使用する必要がありますこのメソッドで呼び出し元オブジェクトが変更されていないことを確認してください。 - ***違う***。このメソッドで***オブジェクト***が変更されていないことを示します。 –
もう少しレベルを下げていく、0(論理的な制約)オブジェクトの状態を不透明に変更するところ。 – gjha
@gjhaこれは、1つ下のレベルではなく、横にあるステップです。 – Deduplicator