2011-06-18 114 views
-2

我们能初始化一个const变量如下正在初始化常量变量

int var1 = 10; 
const int var2 = var1; 

会不会做任何编译器任何警告/错误?

+3

它真的叫做const变量吗?这感觉像一个矛盾。 –

+0

@David:在C或C++标准中没有“变量”的概念。我想,技术术语是“常量对象”。 –

+2

这个问题没有显示任何研究工作。 –

回答

0

是的,没关系。它是C和C++标准的一部分。一个常量对象可以用一个非const对象来初始化。为什么不呢?

+1

嗯... downvote?你能否提供一份来自标准的报价,说这不正常? :) –

10

取决于代码的位置。

如果它是在一个函数内,那么var1var2是自动的,那么是的,这很好。 var2只能通过复制var1进行初始化,所以var1可以稍后修改的事实与var2不能这样的事实没有关系。

如果它在文件范围内,那么var1var2是静态的,那么不是不好。文件范围内的const整型对象必须用编译时必须知道的值进行初始化(在C++中,这称为“整型常量表达式”,我忘记它是否也是精确的C术语)。在这种情况下,您可能会认为因为两个定义之间没有代码,所以var1的值在编译时已知为10,但由于该类型是非常量,所以标准仍然禁止它。你可以认为这是为了避免实现需要足够聪明来应用这种推理,并证明没有什么能够修改var1:它所要看的只是类型,而不是介入代码。