-2
发现下列语句Wiki:开关在constexpr功能
C++ 11引入constexpr声明的函数的概念;一个 功能可能在编译时被执行。它们的返回值 可以通过需要常量表达式运算消耗, 如整数模板参数。然而,C++ 11 constexpr 功能可以只包含返回的单个表达式(如 以及static_asserts和少量其他声明的)。
C++ 14放松这些限制。 Constexpr声明的函数现在可能 包含以下内容:有条件
- ...
- 分支语句
if
和switch
所以,它实际上是可以有一个开关constexpr函数在C++ 14/C++ 17中?而且,如果可能的话,那是什么语法? 例如,我想有这样的事情:
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;
...
}
}
你试过编译过吗? – Carcigenicate
我的意思是,这个工程:http://ideone.com/pjMrvr – kim366
@Carcigenicate,呃,哦。原来它只是我的旧g ++(4.9.2)中的一个bug。但它在第3.5次工作 –