我只是想知道像const int N=10
这样的语句是否会在编译时执行。我问的原因是因为下面的代码可以工作。
int main()
{
const int N=10;
int a[N]={};
return 0;
}
但是这个不会。
int main()
{
int N=10;
int a[N]={};
return 0;
}
最佳答案
编译器必须生成代码“就好像”表达式是在
编译时间,但 const
本身不足以满足此要求。在
顺序用作数组的维度,例如表达式
N
必须是“常数积分表达式”。 const int
是
仅当用常量初始化时才为常量积分表达式
整数表达式,并且初始化对编译器可见。
(比如 extern int const N;
,不能用在
常数积分表达式。)
然而,要成为常量积分表达式,变量必须是
常量
;在你的第二个例子中,编译器的行为和
结果程序必须“好像”表达式仅在
运行时(这意味着它不能用作
大批)。实际上,至少通过优化,编译器可能
将在编译时评估 N
,但它仍然必须假装它
不能,拒绝编译代码。
关于c++ - const int 定义的变量是在编译时确定的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27048025/