C++ 模板未报告局部变量的错误

c++ template not reporting error for local variable

本文关键字:局部变量 错误 报告 C++      更新时间:2023-10-16

为什么会报告错误:

class a {
public:
    void b() {this->c++;}
};
int main() {
    a var;
}

但这不行吗?

template <typename d> class a {
public:
    void b() {this->c++;}
}; 
int main() {
    a<int> var;
}

尽管"a"是一个模板化类,但函数"b",或者至少是对变量"c"的访问,不依赖于类型"d",所以它应该报告一些东西。

但是,如果我在主函数中调用"var.b();",它会给出一个错误。

我知道这是一个简单的问题,我真的想不通。

这是因为函数a<int>::b()没有实例化,因为它是一个模板。当你尝试实例化它时,即像var.b();一样调用它,编译器会吐出一个错误。您必须了解模板是"按需"实例化的,即当编译器需要实例化时。否则,只会进行最少的语法验证。关于模板中的实例化/名称查找的细节是一个相当复杂的主题,我强烈推荐这本书:C++模板:David Vandevoode和Nicolai Josuttis的完整指南。

第一个代码片段并非如此:函数必须从一开始就有效。