6

質問は簡単です... this->yourvariable または yourvariable を何らかの理由で直接使用することに違いはありますか?

私はそれで問題を見つけていませんが、私はこれを使用しています->多く、さらに先に進む前に違いがあるかどうかを知りたい.

ここの投稿にコメントがあり、どのスレッドかは覚えていませんが、その人は「これ」というキーワードの使用について何か言っていました。

個人的には、変数を直接使用するよりも使いやすいと思います。コードがより簡単できれいになります。

ジョー

4

4 に答える 4

16

ほとんどの場合、違いはありません。ただし、違いが生じる状況があります。

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 フェーズ ルックアップ」を適切に実行するコンパイラは、「this->」を削除すると、私が何をすべきかわからないと文句を言うでしょう。「this->」は、それが基本クラスのメンバーであることを示します。基本クラスはテンプレート パラメータに依存するため、クラス テンプレートがインスタンス化されるまでルックアップは遅延します。

于 2009-10-22T21:52:04.690 に答える
12

いいえ、実際の違いはありません。単にスコープ修飾子です。ただし、メソッドを仮定します。

void SetFoo( Foo foo )
{
    this->foo = foo;
}

this->foo は非公開メンバーです。ここでは、クラス/インスタンス変数と同じ名前のパラメーターを取ることができます。

于 2009-10-22T21:47:05.577 に答える
1

を使用thisするとコードが読みやすくなりますが、そうしなければならない理由はありません。コンパイラが生成するアセンブラ コードを見ると、機能的に (通常は文字どおり) 同一であるはずです。

基本的に、関数が呼び出されると、隠し引数が渡され、thisどの変数がどこにあるかを把握するために使用されます。変数を なしで直接使用する場合、this->構文糖衣を利用する以外は何もしていません。

于 2009-10-22T21:51:10.563 に答える
0

これは、ここでC#について尋ねられ、答えられたものであり、答え(少なくとも私のもの)は同じだと思います。好みです。

于 2009-10-22T21:47:55.070 に答える