C ++標準(9.2.3.2静的データメンバー)による
1静的データメンバーはクラスのサブオブジェクトの一部ではありません...
そして(9.2.2.1このポインタ)
1非静的(9.2.1)メンバー関数の本体では、キーワードthisは、関数が呼び出されるオブジェクトのアドレスを値とするprvalue式です。クラスXのメンバー関数でのこのタイプはX *です。メンバー関数がconstとして宣言されている場合、このタイプはconst X *、..です。
そしてついに(9.2.2非静的メンバー関数)
3 ...名前ルックアップ(3.4)がid式の名前をあるクラスCの非静的非型メンバーに解決し、id式が潜在的に評価されるか、CがXまたは基本クラスである場合Xの場合、id式は、の左側の接尾辞式として(* this)(9.2.2.1)を使用して、クラスメンバーアクセス式(5.2.5)に変換されます。オペレーター。
したがって、このクラス定義では
class A
{
public:
static int a;
void set() const
{
a = 10;
}
};
静的データメンバーa
はクラスタイプのオブジェクトのサブオブジェクトでthis
はなく、ポインターは静的データメンバーへのアクセスに使用されません。したがって、メンバー関数、非静的定数または非定数、または静的メンバー関数は、定数ではないため、データメンバーを変更できます。
このクラス定義では
class A
{
public:
int a;
void set() const
{
a = 10;
}
};
非静的データメンバーa
は、クラスタイプのオブジェクトのサブオブジェクトです。メンバー関数でアクセスするには、この構文のメンバーアクセス構文が暗示されているかのいずれかが使用されます。this
データメンバーを変更するために定数ポインタを使用することはできません。また、関数は修飾子で宣言されているため、これが実際const A *
に関数内で型を持っているポインター。この場合、関数に修飾子がない場合は、データメンバーを変更できます。set
const