2013-05-14 74 views
3

我試過下面的代碼片段與MSVC 10,它工作正常。常量表達式中的條件運算符

enum 
{ 
    FOO = (sizeof(void*) == 8 ? 10 : 20) 
}; 

int main() 
{ 
    return FOO; 
} 

我想知道的是:是否在C++標準(最好是C++ 98)允許我使用條件,運營商的常量表達式時,所有的操作數是常量表達式,或者這是一個微軟怪癖/擴展?

回答

6

這是完全有效和合理的標準C++。

三元條件運算符形成一個表達式,如果表達式的操作數是,則該表達式是一個常量表達式。

標準的參比是C++ 11 5.19/2:

條件表達式芯常量表達式 [...]

。注意,通過5.16 ,三元條件表達式是條件表達式中的一種。其他類型如2 == 3

+0

你能向我解釋這是如何在標準中定義的嗎?顯然,例如, (C99 6.6/6)描述了整型常量表達式,但對運算符沒有太多的描述。 – mooware 2013-05-14 17:53:06

+0

@mooware:我以爲你在問C++嗎?當涉及到常量表達式時(C89),C有很大的不同。我很高興讓其他人挖掘出C參考。 – 2013-05-14 17:53:49

+0

是的,我問的是C++,但這是我在SO上發現的第一個參考。對不起,我感到困惑,謝謝你的回答。 – mooware 2013-05-14 17:56:39