我是否需要在我的主 cpp 中包含库,即使它已包含在头文件中?
Do I need to include libraries in my main cpp, even if it's been included in a header file?
假设我有一个文件 player.h
,在 player.h 中我包含了以下内容:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
我是否需要在 player.cpp
中再次包含这些,在那里我充实了头文件中声明的函数?如果我不这样做,我是否需要在 运行 main.cpp
中包含它们,这会调用我的各种 .cpp 和 .h 的函数
学校从来没有真正告诉我是否要这样做,所以我总是把所有的东西都包括在内。如果没有必要,多次包含所有内容与不包含所有内容之间是否有明显区别?
包含预处理器指令告诉预处理器用文件的内容替换它。因此当你有
// some_header.h
#include <foo>
和
// some_source.cpp
#include <some_header.h>
那么如果你编译 source.cpp
,编译器在预处理步骤后看到的是这样的:
// some_source.cpp
... contents of foo ...
即:#include <some_header.h>
被header的内容替换,#include <foo>
被foo
的内容替换。
不,您不需要两次包含 headers。虽然 headers 应该包括守卫,但它也不会受到伤害。建议是:包括您使用的内容(但不要更多)。
假设我有一个文件 player.h
,在 player.h 中我包含了以下内容:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
我是否需要在 player.cpp
中再次包含这些,在那里我充实了头文件中声明的函数?如果我不这样做,我是否需要在 运行 main.cpp
中包含它们,这会调用我的各种 .cpp 和 .h 的函数
学校从来没有真正告诉我是否要这样做,所以我总是把所有的东西都包括在内。如果没有必要,多次包含所有内容与不包含所有内容之间是否有明显区别?
包含预处理器指令告诉预处理器用文件的内容替换它。因此当你有
// some_header.h
#include <foo>
和
// some_source.cpp
#include <some_header.h>
那么如果你编译 source.cpp
,编译器在预处理步骤后看到的是这样的:
// some_source.cpp
... contents of foo ...
即:#include <some_header.h>
被header的内容替换,#include <foo>
被foo
的内容替换。
不,您不需要两次包含 headers。虽然 headers 应该包括守卫,但它也不会受到伤害。建议是:包括您使用的内容(但不要更多)。