【发布时间】:2016-01-29 18:48:51
【问题描述】:
如果您有以下情况:
if (x)
{
y = *x;
}
else
{
y = 0;
}
那么就保证定义了行为,因为我们只能取消引用x,如果它不是0
也可以这样说:
y = (x) ? *x : 0;
这似乎按预期工作(即使在 g++ 上使用 -Wpedantic 编译)
这是有保证的吗?
【问题讨论】:
-
是的 - 三元运算符只是语法糖
-
是的。 (太短,无法作为答案发布)。
-
三元表达式中没有“短路”。并且它不会在条件被完全评估之前过早地评估或执行任何分支。
-
@EdHeal 我想不出它会是什么语法糖。
-
@EdHeal 但是条件运算符给你一个表达式,而不是一个语句。
标签: c++ undefined-behavior conditional-operator short-circuiting