【发布时间】:2012-09-07 08:39:02
【问题描述】:
这是根据Wikipedia 对三元运算的 GNU 扩展。
iMyVal = --iVal ?: iDft;
虽然我完全知道这是一个 GNU 扩展,但有时使用这种特殊语法可能会非常方便。
那么,有人知道这种语法是否仅在gcc 中可用?或者他们是支持它的任何其他编译器吗?
对于任何感兴趣的人,PHP 从 5.3 开始支持这种语法
提前致谢。
【问题讨论】:
-
当你可以简单地使用
iMyVal = --iVal ? --iVal : iDft;时为什么要使用那个扩展我不知道它是否only在GCC中可用,但我可以肯定地告诉你它是不在 MSVC 中可用。无论如何,如果您希望您的代码兼容,请不要使用编译器特定的扩展...如果您必须像现在这样询问,请不要使用它。 -
@vanneto,你的建议是错误的 - 它减少了
iVal两次。你可以修复它,但如果包裹在宏中会变得很棘手。 -
您为什么要冒险通过省略一个令牌来承担不可移植的风险?恕我直言,
iMyVal = --iVal ? iVal : iDft;的打字工作量并没有显着增加,但更具可读性、更易理解和便携。 -
是的,抱歉,我只是想修复我的代码。无论如何,如果你想要便携,你就必须避免这种语法糖(在这种情况下,IMO 更像是盐)。
-
@Andreas 提供的示例过于简单。让我们看看...试着想想
strtok_r。 ;)
标签: c++ c ternary-operator