我在进行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进行了倒钩,因为条件运算符中的类型不同。因此,throw
表达式的类型似乎不是无效的。
那是什么
如果您回答,请用标准引号备份您的陈述。
事实证明,与条件表达式如何处理throw表达式无关,它与throw表达式的类型无关。我在今天之前当然还不了解这一点。感谢所有答复,特别是大卫·桑利。