在编译后你会发现,其实const被编译成了static的了。也就是说const本质其实就是静态的。 只不过是const的值确定于编译时,属于类型级。它被编译后保存在模块的元数据中。因为它默认是静态的,所有不能与static同时使用。 同时声明const字段时必须赋初始值,其类型只能是基元类型,并且在构造函数中无法更改它的值。 因此,对于PI这种恒定不变的数值建议声明为常量。 [解决办法] const int a = 10;
int b = a;
编译之后你会发现 int b = 10; 跟a一点关系都没有了。 运行时的a其实一点意思都没有。
而static 作为变量,在运行时是有意义的,反而在编译时是没有意义的。
显著的区别在于。 如果你在A.dll中定义了一个const int a= 10; 在B.dll中使用了 int b = A.a; 那么将来有一天,你的a需要改为20。 那么你的B.dll也需要重新编译。