this
関数では、新しい値をどのように割り当てますか?
6 に答える
You can assign the object this
points at:
*this = XY;
But you can't assign the direct value of this
:
this = &XY; // Error: Expression is not assignable
できません。
9.3.2 this ポインタ [class.this]
1 非静的 (9.3) メンバー関数の本体で、キーワード
this
は、関数が呼び出されるオブジェクトのアドレスを値とするprvalue式です。[...] (強調 & リンク鉱山)
であるオブジェクトthis
ポイントを変更できます*this
。例えば:
struct X
{
int x;
void foo()
{
this->x =3;
}
};
メソッドはオブジェクト自体を変更しますが、そのようなものthis = new X
は違法です。
最初の C++ 標準が発行される前、一部のコンパイラの実装では、コンストラクタ内に次のコードを記述できました。
this = malloc(sizeof(MyClass)); // <<== No longer allowed
この手法は、オブジェクトのクラスの割り当てを制御する唯一の方法として機能しました。operator new
への割り当てによって対処されていた問題が、 のオーバーロードによって解決されたため、この慣行は標準で禁止されていthis
ます。
できません。これを行う必要があると感じた場合は、クラスポインタを最初のパラメータとして使用する静的メソッドを作成する必要があります。
ポインタに値を割り当てることはできませんthis
。値を何かに割り当てようとするとthis
、this = &a
不正な表現になります
それはいけません。「this」は、クラスのすべてのメンバー関数に対する隠し引数であり、クラス X のオブジェクトの型は X* const です。これは、「this」が const として定義されているため、新しい値を割り当てることができないことを明確に意味します。ただし、これが指す値は変更できます。詳細については、 http://www.geeksforgeeks.org/this-pointer-in-c/を参照してください。