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

使用它的另一个非常常见的原因是解决歧义问题:

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