6

説明できない何かに出くわしただけです。次のコードはコンパイルされません

template<int a>
class sub{
protected:
    int _attr;
};

template<int b>
class super : public sub<b>{
public:
    void foo(){
        _attr = 3;
    }
};

int main(){
    super<4> obj;
    obj.foo();
}

ところが、に変更_attr = 3;してthis->attr = 3;も問題ないようです。

何故ですか?これを使わなければならない場合はありますか?

以前g++ test.cpp -Wall -pedanticはコンパイルしていましたが、次のエラーが発生します

test.cpp: in member function 'void super<b>::foo()':
test.cpp:11:3: error: '_attr' was not declared in this scope
4

1 に答える 1

7

Why is that? Are there any cases you must to use this?

はい、を使用する必要がある場合がありますthis。あなたの例では、コンパイラがを見ると、クラス内_attrを検索しようとしますが、それを見つけることができません。_attr追加することにより、インスタンス化時間までルックアップthis->遅延subさせ、コンパイラーがの内部でルックアップを見つけられるようにします。

これを使用するもう1つの非常に一般的な理由は、あいまいさの問題を解決することです。

void foo (int i)
{
   this->i = i;
}
于 2012-12-19T23:20:09.530 に答える