나는 reddit에 대한 나의 짧은 시도 중 하나에서 이것을 선택했습니다.
http://www.smallshire.org.uk/sufficientlysmall/2009/07/31/in-c-throw-is-an-expression/
기본적으로 저자는 C ++에서 다음과 같이 지적합니다.
throw "error"
표현입니다. 이것은 실제로 본문과 문법 모두에서 C ++ 표준에서 상당히 명확하게 설명되어 있습니다. 그러나 (적어도 나에게) 명확하지 않은 것은 표현의 유형이 무엇입니까? " void
"을 추측 했지만 g ++ 4.4.0 및 Comeau로 약간의 실험을 통해이 코드를 생성했습니다.
void f() {
}
struct S {};
int main() {
int x = 1;
const char * p1 = x == 1 ? "foo" : throw S(); // 1
const char * p2 = x == 1 ? "foo" : f(); // 2
}
컴파일러는 // 1에 문제가 없었지만 조건 연산자의 유형이 다르기 때문에 // 2에 barfed했습니다. 따라서 throw
표현 의 유형 이 공허하지 않은 것 같습니다.
그래서 그것은 무엇입니까?
답변이 있으면 표준의 인용문을 사용하여 진술을 백업하십시오.
이것은 조건 연산자가 throw 식을 처리하는 방법만큼 throw 식의 유형에 관한 것이 아니라는 것이 밝혀졌습니다. 오늘 전에는 확실히 알지 못했던 것입니다. 답장 한 모든 사람에게 감사하지만 특히 David Thornley에게 감사드립니다.