[英]Can const data members have different values between translation units?
[英]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.