2013-05-14 8 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

+0

@mooware : C++에 대해 묻고있는 줄 알았는데 요? C는 상수 표현식 (C89 이상)에서 상당히 다릅니다. 다른 누군가가 C 참조를 파헤치게 해 주어서 기쁩니다. –

+0

네, C++에 대해 묻고 싶습니다.하지만 여기에있는 첫 번째 참고 자료입니다. 혼란스러워서 죄송합니다. 답변에 감사드립니다. – mooware