切换constexpr功能
在Wiki中发现以下声明:
C ++ 11引入了constexpr声明函数的概念; 一个可以在编译时执行的函数。 它们的返回值可以被需要常量表达式的操作使用,例如整型模板参数。 但是,C ++ 11 constexpr函数只能包含返回的单个表达式(以及static_asserts和少量其他声明)。
C ++ 14放宽了这些限制。 Constexpr声明的函数现在可能包含以下内容:有条件的
if
和switch
那么,实际上是否可以在c ++ 14 / c ++ 17的constexpr函数中进行切换? 而且,如果可能的话,那是什么语法? 例如,我想要这样的东西:
enum class Terrain : std::uintmax_t {
ROAD,
SOIL,
GRASS,
MUD,
SNOW,
};
constexpr float
getStepPrice(Terrain const& terrain)
{
switch constexpr (terrain)
{
case Terrain::ROAD: return 1.0f;
...
}
}
那么,实际上是否可以在c ++ 14 / c ++ 17的constexpr函数中进行切换?
是。
而且,如果可能的话,那是什么语法?
语法绝对没有特别之处,它只是一个正常的switch
。 喜欢这个:
constexpr int fun (int i) {
switch(i) {
case 0: return 7;
default: return 5;
}
}
int main () {
int arr[fun(3)];
}
链接地址: http://www.djcxy.com/p/68369.html