24

this関数では、新しい値をどのように割り当てますか?

4

6 に答える 6

41

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
于 2012-11-20T15:56:22.610 に答える
40

できません。

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は違法です。

于 2012-11-20T15:49:45.520 に答える
20

最初の C++ 標準が発行される前、一部のコンパイラの実装では、コンストラクタ内に次のコードを記述できました。

this = malloc(sizeof(MyClass)); // <<== No longer allowed

この手法は、オブジェクトのクラスの割り当てを制御する唯一の方法として機能しました。operator newへの割り当てによって対処されていた問題が、 のオーバーロードによって解決されたため、この慣行は標準で禁止されていthisます。

于 2012-11-20T16:02:28.483 に答える
3

できません。これを行う必要があると感じた場合は、クラスポインタを最初のパラメータとして使用する静的メソッドを作成する必要があります。

于 2012-11-20T15:51:15.113 に答える
2

ポインタに値を割り当てることはできませんthis。値を何かに割り当てようとするとthisthis = &a不正な表現になります

于 2012-11-20T15:50:25.890 に答える
0

それはいけません。「this」は、クラスのすべてのメンバー関数に対する隠し引数であり、クラス X のオブジェクトの型は X* const です。これは、「this」が const として定義されているため、新しい値を割り当てることができないことを明確に意味します。ただし、これが指す値は変更できます。詳細については、 http://www.geeksforgeeks.org/this-pointer-in-c/を参照してください。

于 2015-06-21T04:21:45.643 に答える