此问题在此处已有答案:
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关于const
与constexpr
,但我还是不明白。
1条答案
按热度按时间ru9i0ody1#
为什么下面的示例编译时没有问题?
任何
constexpr
变量的完整表达式都必须是常量表达式,即在编译时可求值。您的初始值设定项
var*5
是常量表达式,因为var
是常量限定的整型,它本身是由整型常量表达式初始化的;同样,5
也是整数常量表达式,因此,全表达式var*5
也是常量表达式。因此,没有什么会导致程序是病态的。