“ this”クラス内のポインター
質問
質問は簡単です... this-> yourvariableまたはyourvariableを何らかの理由で直接使用することに違いはありますか?
それで問題は見つかりませんが、これを使用しています->さらに多くの違いがあるかどうかを知りたいと思います。
ここで投稿のコメントを見ましたが、どのスレッドを覚えていませんが、キーワード「" this"」の使用について誰かが言いました。
個人的には、変数を直接使用するよりも良いと思います。コードがより簡単できれいになります。
ジョー
解決
いいえ、実際の違いはありません。単にスコープ修飾子です。ただし、メソッドがあるとします
void SetFoo( Foo foo )
{
this->foo = foo;
}
this-> fooはプライベートメンバーです。ここでは、クラス/インスタンス変数と同じ名前のパラメーターを取ることができます。
他のヒント
ほとんどの場合、違いはありません。しかし、それが違いをもたらす状況があります:
class foo
{
int i;
void bar() {
int i = 3;
i; // refers to local i
this->i; // refers to the member i
}
};
また、テンプレートでは、名前の検索が遅延するように、 this->
でメンバーを修飾する必要がある場合があります。
template<typename T>
struct A
{
int i;
T* p;
};
template<typename T>
struct B : A<T>
{
void foo() {
int k = this->i; // here this-> is required
}
};
「2フェーズルックアップ」を適切に実行するコンパイラ。 &quot; this-&gt;&quot;を削除すると文句を言うでしょう。それは私が何をすべきかを知らないこと。 &quot; this-&gt;&quot;基本クラスのメンバーであることを伝えます。基本クラスはテンプレートパラメータに依存するため、クラステンプレートがインスタンス化されるまでルックアップは遅延します。
this
を使用するとコードが読みやすくなりますが、そうする必要はありません。コンパイラが生成するアセンブラコードを見ると、機能的に(そして通常は文字通り)同一であるはずです。
基本的に、関数が呼び出されると、隠された引数 this
が渡されます。この引数は、どの変数がどこにあるかを判断するために使用されます。 this-&gt;
を使用せずに変数を直接使用する場合、構文糖を使用する以外は何もしていません。
これは、C#についてこちらそして、答え(少なくとも私のもの)は同じだと思います。好みです。