0

根据 ISO/IEC 14882:2011,我们不能在三元运算符的第二个和第三个操作数中都使用 throw 表达式:

5.16 条件运算符 [expr.cond]

2 如果第二个或第三个操作数的类型为 void,则在第二个和第三个操作数上执行左值到右值 (4.1)、数组到指针 (4.2) 和函数到指针 (4.3) 标准转换第三个操作数,并且以下之一应成立: — 第二个或第三个操作数(但不是两者)是 throw 表达式(15.1);结果是另一个的类型并且是prvalue。— 第二个和第三个操作数都有 void 类型;结果是 void 类型并且是纯右值。[ 注意:这包括两个操作数都是 throw 表达式的情况。——尾注]

为什么 Comeau 编译器和 gcc 都允许这段代码?

int main()
{
   true ? throw 0 : throw 1;
}
4

1 回答 1

2

仔细阅读,标准并没有禁止它,甚至在注释中提到它。

于 2012-09-09T09:13:34.423 回答