gpt4 book ai didi

带有模板的 C++ header 顺序

转载 作者:行者123 更新时间:2023-11-30 01:41:06 25 4
gpt4 key购买 nike

我是 C++ 的新手,现在正在研究模板并遇到了这个问题。

当模板类型需要另外一个类时,是否对header include order有特定要求?

vector<string> stringVector;

像这样:我们应该在 vector 之前包含 string 吗?

我读到这个 ​​(C++ Header order),它说头文件应该包含在类要求顺序中。

然而,正如这个(Template Compilation)所表明的,或者如果这是我的误解,“编译器为模板类实例化中给出的特定类型生成代码”,我认为这意味着当我们实例化 stringVector 时,编译器已经包含了 string header ,所以不应该有“vector 这里是 string required"关系。

那么,到底哪种解释是对的,我的解释哪一部分是对的还是错的呢?谢谢。

最佳答案

无论何时在 C++ 中使用模板,所使用的模板类型都必须是完整类型,这要求您在要使用字符串 vector 时包含字符串类。 include无非就是将include文件中的代码复制粘贴到你的include所在的地方。

1> #include <string>
2> #include <vector>
3>
4> class Foo {
5> private:
6> vector<string> bar;
7> }

当第 6 行被编译时,编译器必须知道这两种类型都是完整类型(字符串因为它是模板, vector 因为它不是指针)。 include 位于类之上,因此编译器在编译第 6 行时知道这两种类型。包含它们的顺序无关紧要。

关于带有模板的 C++ header 顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42001156/

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