C++ 为什么';编译器在某些情况下看不到模板类中的错误吗?
我偶然发现了g++(6.2.1)编译器的一个行为,我没有例外。似乎在某些情况下,当未使用错误的函数定义时,g++会忽略模板类中的错误 让我们举一个例子:C++ 为什么';编译器在某些情况下看不到模板类中的错误吗?,c++,syntax,compiler-errors,C++,Syntax,Compiler Errors,我偶然发现了g++(6.2.1)编译器的一个行为,我没有例外。似乎在某些情况下,当未使用错误的函数定义时,g++会忽略模板类中的错误 让我们举一个例子: class A { bool _var; public: void myFunc() const { _var = true; } }; int main() { A a; return 0; } 编译器返回以下错误: 错误:在只读对象中分配成员“A::var” 这正是我所期望的。现在
class A
{
bool _var;
public:
void myFunc() const
{
_var = true;
}
};
int main()
{
A a;
return 0;
}
编译器返回以下错误:
错误:在只读对象中分配成员“A::var”
这正是我所期望的。现在让我们制作类模板:
template <typename MyType>
class A
{
bool _var;
public:
void myFunc() const
{
_var = true;
}
};
int main()
{
A<int> a;
return 0;
}
模板
甲级
{
布尔乌瓦;
公众:
void myFunc()常量
{
_var=真;
}
};
int main()
{
A A;
返回0;
}
即使我们试图在const方法中为成员变量赋值,这也可以很好地编译。
然后,如果我尝试使用myFunc函数,编译器将再次看到错误并拒绝编译
为什么会发生这种情况?难道编译器不应该在每种情况下都能看到错误吗
谢谢 之所以会发生这种情况,是因为模板类的成员本身就是模板,因此只能在使用时实例化。未使用的模板只接受某些检查(所谓的两步实例化) 之所以会发生这种情况,是因为模板类的成员本身就是模板,因此只能在使用时实例化。未使用的模板只接受某些检查(所谓的两步实例化)