为什么编译器在某些情况下看不到模板类中的错误?
Why doesn't the compiler see errors in a template class in some cases?
我偶然发现了我没有除了我没有的行为(6.2.1)编译器的行为。似乎在某些情况下,当不使用错误的函数定义时,G 忽略了模板类中的错误。
让我们以这个示例:
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;
}
这可以很好地编译,甚至认为我们正在尝试将值分配给const方法中的成员变量。然后,如果我尝试使用MyFunc函数,则编译器将再次看到错误并拒绝编译。
为什么会发生这种情况?编译器不应该在每种情况下都能看到错误吗?
谢谢!
这正在发生,因为模板类的成员本身就是模板,因此仅在使用时就实例化。未使用的模板仅进行某些检查(所谓的两步实例化)。
相关文章:
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 看不到文件'SDL2.lib'
- WSL 看不到环境变量
- 为什么我的 FreeRTOS 任务看不到类成员?
- Google Colab 看不到 .so 文件
- 派生类看不到基类成员
- 为什么我看不到字符串?
- 静态链接库时,收到链接器错误:找不到 -lgcc_s
- CMake 看不到SDL2_PATH环境变量 (Windows)
- OpenMP 任务看不到共享变量的更改
- C++ ZBar cmake 错误"找不到文件"时包括
- handleMessage看不到我的类和函数
- 为什么 connect() 函数看不到插槽?
- 模板类看不到继承的模板成员
- 为什么即使链接器找到目标文件,我的程序也看不到函数定义?
- 将 somedialog.h 包含在项目的其他部分中会使编译器看不到 ui_somedialog.h
- SFML - 代码::块看不到 sfml 图形(等)文件
- 为什么编译器在某些情况下看不到模板类中的错误?
- 编译时错误,看不到代码中的明显错误
- C++链接器错误 - 看不到为什么它没有链接?(包括完整的代码示例)