“静态常量”与“常量”的C ++语义

特别是在C ++中,语义上的区别是什么,例如:

static const int x = 0 ; 

 const int x = 0 ; 

对于static链接和存储类说明符(即函数内部和外部)。

在文件范围内,在C ++中没有区别。 const使内部链接成为默认值,所有全局variables都具有静态生命周期。 但是第一个变体在C中具有相同的行为,所以可能是使用它的一个很好的理由。

在一个函数中,第二个版本可以通过参数来计算,在C或C ++中,它不必像其他一些语言所需要的编译时常量。

在一个类中,和函数基本一样,一个实例的const值可以在ctor-initializer-list中计算 。 在启动初始化过程中设置了一个static const ,对于程序的其余部分保持不变。 (注意: static成员的代码看起来有些不同,因为声明和初始化是分开的。)

请记住,在C ++中, const意味着只读 ,而不是常量 。 如果你有一个指向const的指针,那么程序的其他部分可能会改变你的值,而你不在寻找。 如果variables是用const定义的,那么在初始化之后没有人能够改变它,但是初始化仍然可以是任意复杂的。