gcc constexpr变量在初始化时使用const变量[重复]

f87krz0w  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(125)

此问题在此处已有答案

The value of a const variable is or is not usable in a constant expression, depending on the variable type(2个答案)
What's the difference between constexpr and const?(共10个答案)
上个月关门了。
为什么下面的示例编译时没有问题?

#include <iostream>
int main(){
  
  const int var1 = 2;
  constexpr int var2 = var1 * 5;

return 0;
}

根据理论:* 不是常量表达式的“变量”(编译时不知道其值)*
我用的是gcc编译器,是不是每个编译器的行为都不一样?
那么,在这个例子中,const var1在编译时是如何知道的呢?
我找到了othertopics关于constconstexpr,但我还是不明白。

ru9i0ody

ru9i0ody1#

为什么下面的示例编译时没有问题?
任何constexpr变量的完整表达式都必须是常量表达式,即在编译时可求值。
您的初始值设定项var*5是常量表达式,因为var是常量限定的整型,它本身是由整型常量表达式初始化的;同样,5也是整数常量表达式,因此,全表达式var*5也是常量表达式。因此,没有什么会导致程序是病态的。

相关问题