偶然发现了一些我无法解释的事情。以下代码无法编译
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
答案 0 :(得分: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;
}