10

可以说我有以下代码:

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

似乎无论R.empty(). 这是标准行为吗?

4

1 回答 1

20

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

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

于 2013-02-07T23:33:34.753 回答