C ++,三元运算符操作数评估规则

时间:2013-02-07 23:26:38

标签: c++

假设我有以下代码:

std::vector<T> R;
if (condition) R = generate();
...
for (int i = 0; i < N; ++i) {
    const auto &r = (R.empty() ? generate() : R);
}

无论R.empty()如何,都会调用generate。这是标准行为吗?

1 个答案:

答案 0 :(得分:15)

来自C ++ 11标准的第5.16 / 1段:

  

条件表达式从右到左分组。第一个表达式在上下文中转换为bool(第4条)。它被评估,如果是,则条件表达式的结果是第二个表达式的值,否则是第三个表达式的值。 仅评估第二个和第三个表达式中的一个。在与第二个或第三个表达式相关的每个值计算和副作用之前,对与第一个表达式相关的每个值计算和副作用进行排序。