gpt4 book ai didi

c++ - 多重定义和命名空间

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:16 24 4
gpt4 key购买 nike

这是在多个文件中 #include 的命名空间中拥有函数的正确方法吗?

测试.h

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

bool test(){
return true;
}
}
}
#endif //TEST

最佳答案

include guard name TEST 可能与其他一些宏冲突,使用更复杂的东西,比如 HEADERNAME_H

注意:以下划线开头后跟大写的名称,以及包含两个连续下划线的名称,保留用于实现。

其次,如果您要将其放入头文件中,则函数定义需要内联。否则,当包含在多个翻译单元中时,您将收到多重定义链接器错误。或者更正式地说,该标准的 ODR(单一定义规则)禁止此类多重定义,除非它们都是内联并且实际上相同。

编辑:删除上面的内容,因为我没有看到您使用匿名 namespace

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

干杯,

关于c++ - 多重定义和命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4827596/

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