我们可以像下面这样初始化一个const变量吗
int var1 = 10;
const int var2 = var1;
这会在任何编译器中导致任何警告/错误吗?
取决于代码在哪里。
如果它在函数内部,那么
var1
和 var2
是自动的,那么是的,这没问题。无论如何,var2
只能通过复制var1
来初始化,因此var1
可以稍后修改这一事实与var2
不能修改的事实无关。
如果它在文件范围内,那么
var1
和 var2
是静态的,那么不行。文件范围内的 const 整数对象必须使用编译时已知的值进行初始化(在 C++ 中,这称为“整数常量表达式”,我忘记这是否也是确切的 C 术语)。在这种情况下,您可能会认为,因为两个定义之间没有代码,所以 var1
的值在编译时就已知为 10
,但由于类型是非常量,所以标准无论如何都禁止它。您可以认为这是为了避免实现需要足够智能来应用该推理并证明没有任何东西能够修改var1
:它所需要查看的只是类型,而不是中间代码。
是的,没关系。它是 C 和 C++ 标准的一部分。常量对象可以用非常量对象来初始化。为什么不呢?