【发布时间】:2016-03-04 08:07:41
【问题描述】:
这样编译:
struct A{};
struct B{};
int main(){
if(true)
throw A();
else
throw B();
}
,但是
struct A{};
struct B{};
int main(){
throw( true ? A() : B() );
}
不会。
我可以用三元运算符抛出吗?
【问题讨论】:
-
A和B是不同的类型,所以表达式true ? A() : B()是错误类型的(它必须是 A 或 B)。 -
编译器错误应该指出
A和B不兼容。 gcc 给error: incompatible operand types ('A' and 'B') -
这不是骗子;当
throw在三元运算符内时,被骗者指的是编译器崩溃,但这个问题却在外面(这是关于类型错误)。 -
@EdPlunkett 某人只是略过另一个问题,投票结束,意识到他们的错误,然后重新打开它。那个白痴。 ;-)
-
你也不能
std::cout << (true? 1 : "nope")。不足为奇。
标签: c++