C语言 初始化常量变量

cgyqldqp  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(97)

我们可以像下面这样初始化一个常量变量吗

int var1 = 10;
const int var2 = var1;

这会在任何编译器中导致任何警告/错误吗?

vlju58qv

vlju58qv1#

这取决于代码在哪里。
如果它在一个函数中,那么var1var2是自动的,那么是的,这是可以的。var2只能通过复制var1来初始化,所以var1可以在以后修改的事实与var2不能修改的事实没有关系。
如果它在文件范围内,那么var1var2是静态的,那么不,它不好。在文件作用域中的const integer对象必须初始化一个在编译时确定的值(在C++中这被称为“integer constant expression”,我忘记了这是否也是确切的C术语)。在这种情况下,您可能会认为,因为两个定义之间没有代码,所以var1的值在编译时应该是10,但因为类型是非const的,所以无论如何标准都禁止它。你可以认为这是为了避免实现需要足够聪明来应用这条推理路线,并证明没有任何东西能够修改var1:它只需要查看类型,而不是插入的代码。

kmbjn2e3

kmbjn2e32#

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

相关问题