1. ホーム
  2. c++

[解決済み] 関数宣言の最後の "const "は何を意味するのですか?[重複あり]

2022-03-15 15:43:36

質問

ある本を手に入れたら、こんなことが書いてありました。

class Foo 
{
public:
    int Bar(int random_arg) const
    {
        // code
    }
};

どういう意味ですか?

どのように解決するのですか?

キーワードで示されるquot;const関数"は const 関数宣言の後に、このクラス関数がクラスのメンバ変数を変更すると、コンパイラ・エラーになります。 ただし、関数内部でのクラス変数の読み出しは問題ありませんが、この関数内部での書き込みはコンパイラー・エラーとなります。

このような "const function" について考えるもう一つの方法は、クラス関数を、暗黙のうちに this ポインタを使用します。つまり、あるメソッド int Foo::Bar(int random_arg) (最後のconstを除いた)関数の結果は以下のようになります。 int Foo_Bar(Foo* this, int random_arg) のような呼び出しと Foo f; f.Bar(4) は、内部的には次のようなものに対応します。 Foo f; Foo_Bar(&f, 4) . ここで、最後に const を追加します ( int Foo::Bar(int random_arg) const は,const this ポインタを持つ宣言と理解することができる. int Foo_Bar(const Foo* this, int random_arg) . の型は this この場合、メンバ変数の変更はできません。

クラスのどの変数にも書き込めないという制約を緩和することができます。関数が "const関数"としてマークされている場合でも、一部の変数を書き込み可能にするために、これらのクラス変数には、キーワード mutable . したがって、クラス変数がmutableとマークされている場合、"const関数"がこの変数に書き込むと、コードはきれいにコンパイルされ、変数は変更することができます。(C++11)

を扱うときは、いつものように const キーワードは、C++文の中のconstキーワードの位置を変えることで、全く異なる意味を持ちます。 上記の使い方は const を追加した場合のみ適用されます。 const の後、関数宣言の最後に括弧を付けます。

const はC++で非常に多用される修飾子です。ポインタとの組み合わせでは、構文や順序が単純でないことがよくあります。ポインタとの組み合わせでは、構文や順序が単純ではないことがよくあります。 const の正しさと const というキーワードがあります。

Constの正しさ

C++の「const」宣言。なぜ、そして、どのように