2

私は C++ の初心者で、確認したい質問があります...オンラインでかなり検索しました。

クラス呼び出し A があり、Afunction という関数があるとします。関数は次のようになります。

// this is pseudocode
void Afunction (const A& a)
{
 a.something = a.something +1;
}

私の理解では、「a」と呼ばれる「ポインターのような」ものがあり、それは渡すもののエイリアスです。ここでは、エイリアス自体が const であることを確認するだけで、それが指す値が勝つという保証はありません」変更する必要はありません。実際、私はそれを変更しています..そして、エラーは発生しません。

私の質問は、エイリアスが指している値を変更できないようにするにはどうすればよいですか? エイリアス以外のポインターだと、はるかに簡単に実行できます...

前もって感謝します。

4

3 に答える 3

2

コンパイラがそのコードを受け入れる場合は、すぐに破棄する必要があります。

を変更することはできませんa

于 2013-04-01T21:25:23.967 に答える
1

それはすべてが何であるかに依存しsomethingます。

クラス A のコードを投稿すると、変更できる理由を説明しやすくなりますsomething

通常、 の内容を変更することはできませんconst A&。しかし...

  • something静的にすることができます。技術的には in の変数にsomething属していないため、 const は重要ではありません。aAfunction
  • something宣言することができますmutable。オブジェクトが const の場合でも変更できるメンバー変数があると便利な場合があります。たとえば、参照カウント。
  • something奇妙なセマンティクスで、まったく異なるものになる可能性があります。(Zyx 2000が指摘したように)。
于 2013-04-01T21:56:21.223 に答える