gpt4 book ai didi

C++ #include header

转载 作者:行者123 更新时间:2023-11-30 03:35:10 25 4
gpt4 key购买 nike

有一本 C++ 书说我们需要在两个不同的文件中两次 #include 头文件,一个带有一个类,另一个带有使用前一个文件中的类的 main()。

引用如下:

because our Sales_data class has a string member, Sales_data.h must #include the string header. Programs that use Sales_data also need to include the string header.

但是有些事情我不明白。如果我们在我们的主文件中#include "Sales_data.h",#include <(string)> 已经在这个头文件中所以不需要在我们的主文件中#include <(string)>。

据我了解,当我们在主文件中#include 一个文件时,C++ 只会复制并粘贴主文件中 header 调用的整个文件。所以添加第二个 #include <(string)> 是不必要的。我说的是当 header 中没有任何#ifndef 或#define 时会发生什么。

我自己做了测试,我只需要在一个文件中写#include <(string)> 就可以了。除了头文件中的 #pragma once 之外,我在这两个文件中都没有任何 # 指令。

最佳答案

您阅读的描述是虚假的。如果类 C 的定义使用类型 T,例如 std::string ,那么该类型需要可用。通常(Microsoft 代码除外)定义 C 的 header 包含定义 T 的 header 。然后 C 的客户端代码只需要包含定义 C 的 header 。

情况与更多任意间接 header 包含不同。假设 C 类不使用 std::string , 但它的标题包括 <string> .然后,如果您使用 C 的代码也使用 std::string , 最好让你的代码也包括 <string> .即使在代码演变的当前点上没有必要这样做。

客户端代码包括必要的 header 的情况,至少与以前的 Microsoft 风格一样,是它本身可以提供更快的构建(构建期间更少的文件访问),并支持通过 Visual 等原始工具进行一些构建优化C++的预编译头文件,所有要预编译的头文件都需要收集在一个大的Mother Of All Headers中。反对这种做法的理由是它需要更多的维护工作。 80% 的编程都是维护。

关于C++ #include header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454656/

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