【发布时间】:2015-06-03 13:22:25
【问题描述】:
缩短这种三元运算符的用法是否安全:
process_ptr(ptr ? ptr : default_ptr);
短路:
process_ptr(ptr || default_ptr);
在 C 和 C++ 中?换句话说,我们是否保证从表达式中得到 either ptr 或 default_ptr,或者是否允许表达式导致任意的 "逻辑真”值,如果表达式逻辑真?
这是您在 Perl 代码中看到的那种代码,但我很少在 C/C++ 中看到它,这是我提出问题的最初基础。
【问题讨论】:
-
我几乎可以肯定
ptr || default_ptr将评估为1或0。 -
条件表达式将返回一个值,但逻辑表达式将始终返回 0 或 1。
-
您是否考虑过检查结果以查看您关于它可能安全的假设是否有效? (你现在应该已经有了答案。)
-
只是好奇:GCC 具有支持
ptr ?: default_ptr以获得此问题中寻求的行为的非标准行为...docs here。如果您实际使用它,您可能需要调整警告。