【发布时间】:2013-02-07 23:26:38
【问题描述】:
假设我有以下代码:
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。这是标准行为吗?
【问题讨论】:
-
不,这不是标准行为。你 100% 肯定这是怎么回事吗?比如,你已经运行了一个调试器,你可以看到它正在检查
R.empty(),而你正在看着它调用generate()? -
@templatetypedef 是的,绝对确定,三重检查
-
您能否发布一个最小的、完整的、独立的、可重现的测试用例,以便我们可以使用它?如果
R.empty()为假,则不应调用generate(),因此我怀疑问题出在其他地方。 -
在我看来,您的代码调用可能会在循环外调用
generate()。这可能是你观察到的吗? -
@Anycorn: show me
标签: c++