![](/img/trans.png)
[英]ODR violation if template is defined in multiple translation units for different types?
[英]Linkage of a variable defined in a namepace and used in multiple translation units
在C语言中,要在多个翻译单元中使用变量,我们需要确保该变量具有外部链接。
同样,在C ++中,如果我希望在命名空间中定义的变量可以在多个转换单元中使用,那么该变量是否必须具有外部链接? 如何正确使用命名空间和链接?
命名空间中定义的变量的默认链接是什么?
谢谢。
它的工作原理与C相同,不同之处在于它周围带有'namespace xyz {}',因此在标头中,您将拥有:
namespace xyz { extern int myglobal; }
在定义它的源文件中,对其进行存储和初始化,您将拥有
namespace xyz { int myglobal = 0; }
作为切向样式注释,我将说以这种方式使用全局变量实际上在C ++中并不常见。 通常,有更好的方法来创建共享的全局状态,例如静态类成员(允许您通过将其设置为受保护/私有并通过静态成员函数限制访问来创建访问限制)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.