“静态常量”与“常量”的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
定义的,那么在初始化之后没有人能够改变它,但是初始化仍然可以是任意复杂的。