我们可以如下初始化const变量吗?
int var1 = 10;
const int var2 = var1;
Run Code Online (Sandbox Code Playgroud)
这会导致任何编译器出现任何警告/错误吗?
Ste*_*sop 12
取决于代码的位置.
如果它在一个函数内部,那么var1并且var2是自动的,那么是的,这很好.var2只是通过复制来初始化var1,所以var1后来可以修改的事实与不能这样做的事实var2无关.
如果是在文件范围内,使var1和var2有静,然后不,没有罚款.文件范围内的const整数对象必须使用一定值在编译时知道的值进行初始化(在C++中,这称为"整数常量表达式",我忘记这是否也是确切的C术语).在这种情况下,您可能会认为因为两个定义之间没有代码,所以var1在编译时将知道该值10,但由于该类型是非const,因此标准禁止它.您可以将此视为为了避免实现需要足够聪明以应用该推理线并证明没有任何能够修改的内容var1:它必须要考虑的是类型,而不是介入代码.