根据ISO/IEC 14882:2011,我们不能在三元操作符的第二个和第三个操作数中使用抛出表达式:
5.16条件算子expr.cond 2如果第二个或第三个操作数的类型为void,则在第二和第三个操作数上执行lvalue-to-rvalue (4.1)、数组到指针(4.2)和函数到指针(4.3)的标准转换,并且下列操作数之一保持不变:-第二个或第三个操作数(但不是两个操作数)是抛出表达式(15.1);结果是另一个操作数的类型,是一个prvalue。-第二个操作数和第三个操作数都有虚空类型;结果为void类型,是一个prvalue。注意:这包括两个操作数都是抛出表达式的情况。-end注记
为什么Comeau编译器和gcc都允许这段代码?
int main()
{
true ? throw 0 : throw 1;
}发布于 2012-09-09 09:13:34
仔细阅读,标准并没有禁止它,它甚至在注释中提到它。
https://stackoverflow.com/questions/12337868
复制相似问题