你应该在前向声明标题中使用#ifndef guard吗?

时间:2012-10-07 08:41:00

标签: c++ header-files forward-declaration

我有一个简单的头文件,我在其中转发声明命名空间中的所有类,例如

#ifndef TEST_FWD_HPP
#define TEST_FWD_HPP

namespace a {
    namespace b {

            class A;
            class B;

    }
}

#endif

此文件是否应防范多个包含(#ifndef ...)?这只对前向声明有意义吗?

3 个答案:

答案 0 :(得分:5)

保护这样的头文件通常是一种好习惯。在大多数情况下,文件只包含一次,但是当项目变得复杂,并且头文件包含在其他头文件中时,它可以帮助您保持理智。

如果你只有前向定义和函数原型,那么它通常没有必要,但随着头文件随着时间的推移倾向于占用东西,它当然值得做。

答案 1 :(得分:2)

多个包含守卫不仅会提供多个声明错误。您需要在每个头文件中插入这些防护,以避免无限的包含循环。

答案 2 :(得分:2)

只需使用(正式非标准)#pragma once并完成它。

除了防止同一翻译单元中的多个包含,头文件或#pragma once让精明的编译器避免重新扫描文件。