【发布时间】:2018-01-17 11:35:32
【问题描述】:
下面的代码没问题:
constexpr double square_cstxpr(double x) { return x * x; }
int main() {
const int test = 5;
constexpr double result = square_cstxpr((double)test);
}
但是,如果 test 的类型从 const int 更改为 const double,g++ 会给出以下错误:the value of 'test' is not usable in a constant expression。
在此处查看 g++ 的代码和输出:http://coliru.stacked-crooked.com/a/2fe9b176c2b23798
有人能解释一下这种行为吗?
【问题讨论】:
-
请添加不能编译的代码而不是描述它。
-
@molbdnilo 有一个指向 coliru 的链接。
-
适合我!
-
事实上,令我困惑的是工作案例场景。使用非
constexpr参数调用constexpr函数应该是非法的,但由于某种原因,当参数的类型为const int时,g++ 很高兴:/。 -
@YSC 这是合法的,例如参见 A Tour of C++ (by Bjarne Stroustrup),第 1.7 节。
标签: c++ c++11 constants constexpr