【发布时间】:2020-03-09 12:01:04
【问题描述】:
你能有 constexpr 右值吗,例如使用几个 constexpr 函数的结果初始化变量时?
即无论编译器设置如何,我可以保证在编译时计算右值吗?
constexpr int getvalue1()
{
return 42;
}
constexpr int getvalue2()
{
return 24;
}
int main()
{
// I want to initialize val with a value known at compile time
constexpr int ceval = getvalue1() + getvalue2();
int val = ceval;
// why can't I just do:
//
// int val = constexpr getvalue1() + constexpr getvalue2();
}
【问题讨论】:
-
为什么你认为你不能做你认为你不能做的事情?你可以做到的。
-
@Cubic
int val = constexpr getvalue1() + constexpr getvalue2();此行无法编译:错误:预期表达式。 -
是的,
getvalue1()返回一个constexpr右值。它可能会或可能不会在编译时实际计算。在发布版本中,它可能会在编译时计算。像您所做的那样,使用constexpr变量应该强制在编译时计算它,而不管编译器设置如何。在 C++20 中,您还可以使用consteval。 -
@iwans 为什么你认为它应该编译?你不能只是想出一些语法并期望它起作用。
-
@HolyBlackCat 我不认为它应该编译,我问我是否可以保证无论编译器设置如何,都会在编译时计算 r 值。