gpt4 book ai didi

c++模板不报告局部变量错误

转载 作者:太空狗 更新时间:2023-10-29 20:22:20 26 4
gpt4 key购买 nike

为什么会报错:

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()不是 instantiated ,因为它是一个模板。当您尝试实例化它时,即称它为 var.b(); ,编译器会报错。您必须了解模板是“按需”实例化的,即当编译器需要实例化时。否则只会进行最少的句法验证。有关模板中实例化/名称查找的详细信息是一个相当复杂的主题,我强烈推荐这本书:C++ Templates: The Complete Guide David Vandevoode 和 Nicolai Josuttis 着。

第一个代码片段不是这种情况:函数必须从一开始就有效。

关于c++模板不报告局部变量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38227675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com