c++ - 为什么 Visual Studio 允许我在模板函数 (C++) 中使用私有成员?
问题描述
我对 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 正在改进的一个已知薄弱环节。
推荐阅读
- postgresql - 使用新的 docker-compose 时用户的密码验证失败
- html - 如何在Angular中按顺序上传文件?
- grails - 如何使用 createCriteria 在 Grails 中执行深度查询
- angular - Angular 4将两个单独的元素一起滚动
- html - 具有所有图像尺寸的图像覆盖父级
- ionic3 - 如何使用 angularfire2 更新 firebase 对象的子对象
- python - 在 python 方法中处理异常的适当方法是什么?
- qt - 带有 MouseArea 的 TreeView 委托:传播鼠标
- text - 在 SSIS 2016 中导入具有固定长度列的 txt 文件时验证行长度
- node.js - EJS 无法读取未定义的属性,我该如何解决?