2017-08-06 72 views
-2

發現下列語句Wiki開關在constexpr功能

C++ 11引入constexpr聲明的函數的概念;一個 功能可能在編譯時被執行。它們的返回值 可以通過需要常量表達式運算消耗, 如整數模板參數。然而,C++ 11 constexpr 功能可以只包含返回的單個表達式(如 以及static_asserts和少量其他聲明的)。

C++ 14放鬆這些限制。 Constexpr聲明的函數現在可能 包含以下內容:有條件

  • ...
  • 分支語句ifswitch

所以,它實際上是可以有一個開關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; 
     ... 
    } 
} 
+1

你試過編譯過嗎? – Carcigenicate

+0

我的意思是,這個工程:http://ideone.com/pjMrvr – kim366

+0

@Carcigenicate,呃,哦。原來它只是我的舊g ++(4.9.2)中的一個bug。但它在第3.5次工作 –

回答

6

所以,它實際上是可能有,在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)]; 
}