2012-09-09 42 views
0

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

5.16条件运算符[expr.cond]

2如果第二或第三操作数的类型为无效,则 左值到右值(4.1),阵列到指针(4.2),和 功能到指针(4.3)标准转换在 第二个和第三个操作数上执行,并且下列之一应为: - 第二个或第三个操作数的 (但不是两个)都是投掷表达式 (15.1);结果是另一种的类型,是一个价值。 - 第二个和第三个操作数都有void类型;结果是void类型的 ,并且是一个prvalue。 [注意:这包括 这两个操作数都是throw-expressions的情况。 - 注意]

为什么Comeo编译器和gcc都允许这样的代码?

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

回答

2

仔细阅读,标准并不禁止它,它甚至指出它在说明中。

+0

我们可以扔课吗?也许是一个文件?我的意思是文件的变量:) –

+0

@tuğrulbüyükışık - 你不能扔课。你可以抛出**类的**对象**。 –