質問

質問は簡単です... 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#についてこちらそして、答え(少なくとも私のもの)は同じだと思います。好みです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top