我对Visual Studio的异常行为感到困惑。
class Test
{
private:
int x;
};
void func()
{
Test t;
t.x; // VS shows error here
}
该代码无法编译,因为我正在尝试访问私有成员 x
但是在使用模板功能的情况下,VS表示一切正常,让我可以访问 x
class Test
{
private:
int x;
};
template <class T>
void func()
{
Test t;
t.x; // No error
}
如果我调用此模板函数,则结果将是编译时错误,并且我理解原因。但是我不明白为什么VS在编辑器窗口中不显示错误。在某些情况下此功能可以使用?还是仅仅是VS编辑器中的错误?
在实例化模板之前,模板函数才是函数(这是生成函数的蓝图)。
为了产生错误,VS总是告诉您实际的模板参数是什么。由于您尚未使用任何实例化它,因此无法创建该错误消息(尽管技术原因可能是另一回事)。
一旦开始将模板用于某些用途,您应该会遇到编译错误。
但是,这是特定于Visual Studio的。其他编译器会在此处给出正确的错误,因为Test::x
它不是从属名称。这是Visual Studio正在改进的已知薄弱环节。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句