我有一个简单的头文件,我在其中转发声明命名空间中的所有类,例如
#ifndef TEST_FWD_HPP
#define TEST_FWD_HPP
namespace a {
namespace b {
class A;
class B;
}
}
#endif
此文件是否应防范多个包含(#ifndef
...)?这只对前向声明有意义吗?
答案 0 :(得分:5)
保护这样的头文件通常是一种好习惯。在大多数情况下,文件只包含一次,但是当项目变得复杂,并且头文件包含在其他头文件中时,它可以帮助您保持理智。
如果你只有前向定义和函数原型,那么它通常没有必要,但随着头文件随着时间的推移倾向于占用东西,它当然值得做。
答案 1 :(得分:2)
多个包含守卫不仅会提供多个声明错误。您需要在每个头文件中插入这些防护,以避免无限的包含循环。
答案 2 :(得分:2)
只需使用(正式非标准)#pragma once
并完成它。
除了防止同一翻译单元中的多个包含,头文件或#pragma once
让精明的编译器避免重新扫描文件。