我有一个看起来像这样的 constexpr 函数:
constexpr int foo(int bar)
{
static_assert(bar>arbitrary_number, "Use a lower number please");
return something_const;
}
但是,用 GCC 4.6.3 编译这个一直告诉我
错误:'bar' 不能出现在常量表达式中
我试过类似的东西
constexpr int foo(constexpr const int bar)
{
static_assert(bar>arbitrary_number, "Use a lower number please");
return something_const;
}
但是 constexpr 不能用于函数参数。
是否有一些简单的方法可以告诉编译器 bar 始终是编译时间常量?
最佳答案
Is there some simple way to tell the compiler that bar is always a compile time constant?
如果 bar
始终是编译时常量,那么您应该将函数编写为:
template<int bar>
constexpr int foo()
{
static_assert(bar>arbitrary_number, "Use a lower number please");
return something_const;
}
因为如果你不这样做,而是写你已经写的东西,那么在那种情况下,函数可以用非const调用争论也是如此;只是当您传递非常量参数时,该函数将失去它的constexpr-ness。
注意上面代码中的arbitrary_number
也必须是常量表达式,否则编译不通过。
关于c++ - 如何告诉 static_assert constexpr 函数参数是 const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9789913/