多重定义和命名空间

Sta*_*als 4 c++ namespaces pragma include-guards

这是在命名空间中使用函数的正确方法吗?我将在多个文件中#include?

test.h

#pragma once
    #ifndef TEST
    #define TEST
    namespace test{
    namespace {

        bool test(){
            return true;
        }
    }
}
#endif //TEST
Run Code Online (Sandbox Code Playgroud)

Che*_*Alf 8

包含防护名称TEST可能与其他一些宏冲突,使用更精细的东西,比如HEADERNAME_H.

注意:以下划线后跟大写的名称和包含两个连续下划线的名称保留用于实现.

其次,如果你要将它放在头文件中,那么函数定义就需要inline.否则,当包含在多个翻译单元中时,您将获得多个定义链接器错误.或者更正式地说,标准的ODR(一个定义规则)禁止这样的多个定义,除非它们全部inline且有效地相同.

编辑:删除上面,因为我没有看到您使用匿名命名空间.

而不是匿名命名空间,它在每个翻译单元中为您提供单独的命名空间,在每个这样的命名空间中提供单独的(相同的)函数定义,而不仅仅是使用inline- 如上面的标记文本中所述.

干杯&hth.,