【发布时间】:2013-07-13 21:03:41
【问题描述】:
在 C++11 中,我们得到 constexpr:
constexpr int foo (int x) {
return x + 1;
}
是否可以使用动态值x 调用foo 导致编译时错误?也就是说,我想创建一个foo,这样就只能传入constexpr 参数。
【问题讨论】:
-
你可以随时把它变成函数模板:
template<int x> int foo() { return x + 1; } -
请注意,
constexpr被部分调用是为了抵消您将在此处的答案中看到的所有语法变通方法。 -
#define foo(N) foo<N>()在我看来是可行的。 -
另外,在未评估的上下文中,
#define REQUIRE_CEXPR(E) []{ constexpr auto x = E; return x; }(),您可以说foo(REQUIRE_CEXPR(1 + 2))(C++14)。对于 C++11,您可以使用[]()->typename std::decay<decltype((E))>::type来显式指定类型。虽然更丑:) -
无答案:将结果存储在
constexpr。