繁体   English   中英

访问翻译单位的const变量

[英]access const variables accross translation units

在C ++中, const变量隐式地从其他翻译单元中隐藏。 有可能阻止吗?

是的,在定义前加上extern例如。

extern const int x = 10;

使用extern关键字:

extern const int x = 10;

这会强制变量具有外部链接。

对于命名空间范围变量,这通常是默认值,您可以使用static (或更好的匿名命名空间)来强制内部链接。

我实际上并不知道命名空间范围const变量默认情况下有内部链接,直到我阅读你的问题然后尝试了它,所以谢谢你。 每天学些新东西!

它可以通过extern关键字实现:

// a.cpp
extern const int x = 10; // definition
// b.cpp
extern const int x;      // declaration

这将产生的效果是,如果常量的值在a发生变化,则不需要重新编译b ,但同时你无法在b.cpp使用x作为编译时常b.cpp (即你不会能写int array[x]; )。

如果没有非常强烈的理由,我宁愿在头文件中定义常量并包含在需要它的所有翻译单元中;

// c.h
const int x = 10;
// a.cpp
#include "c.h"
// b.cpp
#include "c.h"

每次更改时,您都必须重新编译依赖于常量的所有翻译单元,但您可以在编译时在所有翻译单元中使用它。 此方法的局限性在于,如果更改常量并仅重新编译某些转换单位,则常量的值将不一致(这违反了ODR)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM