【发布时间】:2011-12-18 22:50:57
【问题描述】:
以下代码使用 G++ 4.6.1 编译,但不适用于 Visual Studio 2008
return (m_something == 0) ?
throw std::logic_error("Something wrong happened") : m_something;
事实上,Visual Studio 编译器执行了内部崩溃。
我想知道这是否是标准 C++,为什么它不能用 Visual Studio 编译,但用 G++ 编译?
【问题讨论】:
-
无论这是否是有效代码,根据标准,当编译器崩溃并出现内部编译器错误(这是 VC 所做的,IIUC)时,这就是编译器中的错误。即使是错误代码,编译器也应该发出有意义的消息,而不是崩溃报告。
-
记住这是条件运算符,恰好是a三元运算符。
-
是的,当规范中没有“三元”时感到困惑。
-
在一段短暂的时期内(在 c++11 和 c++14 之间),从三元抛出是编写可能在编译时失败的 constexpr 函数的唯一方法。
标签: c++ operators ternary-operator