このポインター型
this のポインター型は 定数 と volatile キーワードで関数宣言で変更できます。これらのキーワードの一つ以上の属性を持っているとして関数を宣言するには関数の引数リストの後にキーワードを追加します。
次の例について考えます。
// type_of_this_pointer1.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
このコードはのメンバー関数this のポインターが 定数 のオブジェクトへの 定数 のポインターとして扱う X を宣言します。cv mod リスト オプションの組み合わせを使用できますが this が指し示すオブジェクトthis のポインター自体を常に変更します。したがって次の宣言は X 関数を宣言します ; this のポインターが 定数 のオブジェクトへのポインターです : 定数
// type_of_this_pointer2.cpp
class Point
{
unsigned X() const;
};
int main()
{
}
メンバー関数の cv 修飾子 は this の型 が メンバー関数宣言子 リスト から特定して 定数 または 揮発性 (または両方) では クラス型は クラス名が次の構文で記述されています :
[入力] リストの cv 修飾子クラス型 * 定数 this
つまりthis は定数のポインターでは; これは再割り当てすることはできません。メンバー関数宣言に使用される 定数 または volatile の修飾子はその関数のスコープで this が指すクラス インスタンスに適用されます。
次の表はこれらの修飾子の使用方法に関する詳細を示します。
このセマンティクス修飾子
修飾子 |
説明 |
---|---|
const |
メンバー データを変更できません ; 定数 以外のメンバー関数を呼び出すことはできません。 |
volatile |
メンバー データはメモリからアクセスするたびに読み込まれます ; 特定の最適化を無効にします。 |
これは 定数 のメンバー関数の 定数 のオブジェクトを渡すとエラーが発生します。同様にvolatile のメンバー関数の volatile のオブジェクトを渡すとエラーが発生します。
定数 として宣言されたメンバー関数はメンバーのデータを変更できません (this のポインターはオブジェクトへの 定数 —このような関数ポインター) です。
[!メモ]
コンストラクターとデストラクターは 定数 または volatile として宣言することはできません。が 定数 または volatile のオブジェクトで呼び出すことができます。