我们可以按如下方式初始化一个const变量
int var1 = 10;
const int var2 = var1;
这会导致任何编译器出现任何警告/错误吗?
答案 0 :(得分:11)
取决于代码的位置。
如果它在一个函数内部,那么var1
和var2
是自动的,那么这是好的。 var2
仅通过复制var1
进行初始化,因此var1
可以在以后修改的事实与var2
无法实现的事实无关。
如果它在文件范围内,那么var1
和var2
是静态的,那么不是没有问题。文件范围内的const整数对象必须使用一定值在编译时知道的值进行初始化(在C ++中,这称为“整数常量表达式”,我忘记这是否也是确切的C术语)。在这种情况下,您可能会认为,因为两个定义之间没有代码,var1
的值在编译时将被称为10
,但因为类型是非const,无论如何标准禁止它。你可以认为这是为了避免实现需要足够聪明才能应用这一推理线并证明没有能力修改var1
:所有它必须要看的是类型,而不是介入代码。
答案 1 :(得分:1)
是的,没关系。它是C和C ++标准的一部分。可以使用非const对象初始化常量对象。为什么不呢?