【发布时间】:2018-01-14 00:31:39
【问题描述】:
在Wiki找到如下语句:
C++11 引入了 constexpr 声明函数的概念;一种 可以在编译时执行的函数。他们的返回值 可以被需要常量表达式的操作使用, 例如整数模板参数。但是,C++11 constexpr 函数只能包含一个返回的表达式(如 以及 static_asserts 和少量其他声明)。
C++14 放宽了这些限制。 Consexpr 声明的函数现在可以 包含以下内容:条件
- ...
- 分支语句
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;
...
}
}
【问题讨论】:
-
你试过编译吗?
-
我的意思是,这行得通:ideone.com/pjMrvr
-
@Carcigenicate,呃,哦。原来这只是我的旧 g++ (4.9.2) 中的一个错误。但它适用于 clang 3.5
-
我从整个页面中什么也没学到。