【发布时间】:2017-08-28 16:10:06
【问题描述】:
在返回 void 的函数中使用三元运算符是否安全?像这样的:
void foo1(){}
void foo2(){}
//////////////
bool to_use_1 = ....;
to_use_1 ? foo1() : foo2();
编译器可以删除这段代码吗?假设它将这些函数视为纯函数,并执行删除这些调用的积极优化
【问题讨论】:
-
如果 to_use_1 为真,则执行 foo1,否则执行 foo2。这是完全安全的。是否愿意取决于您和您的编码标准。
-
"...which delete these calls" 只有在“as-if-rule”下,编译器才能证明 foo1 和/或 foo2 没有副作用。
-
@BoundaryImposition 是对的。
-
是包含表达式的语句。它总是被评估。另外,
foo1();也是表达式语句。优化只进行不改变结果的更改(值、返回、副作用,...)。优化不得改变程序行为。
标签: c++ compiler-optimization conditional-operator