为什么我不使用它就无法访问成员

Why can't I access members without using this

本文关键字:访问 成员 为什么      更新时间:2023-10-16

我有一个从中继承的模板化类,并通过派生类访问基类成员。如果不使用"this",我就无法访问它们,我找到了下降的原因。

如果我理解正确的话,当我使用模板时,模板化代码的副本是用专门化的方法生成的,然后它才会编译。这意味着如果我写vector<int>,编译器会复制向量,并用"int"替换所有的"T"。

如果是这样的话,我不明白为什么模板和非模板代码之间应该有任何区别。

template <typename T>
class b
{
protected:
 int myMember;
};
template<typename T>
class e : public b<T>
{
public:
 void dosomething()
 {
  this->myMember = 2; // Everything is perfect
  myMember = 2; // Doesn't compile in GCC, can't find the member
 }
};
int main()
{
 e<int> mye;
 mye.dosomething();
}

因为基类依赖于模板参数,所以在非限定查找过程中不考虑基成员。

当您使用this->时,您将使用类成员查找,检查基类成员,即使它是依赖类型。