【发布时间】:2018-05-21 09:22:06
【问题描述】:
给定以下代码,
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::any_of(std::begin(numbers), std::end(numbers),
[](int number) { return number > 3; } );
std::any_of 是否需要(按标准)在达到 4 时立即返回?
【问题讨论】:
-
即:很明显它应该在知道决定后立即返回,但必须吗?不过,我真的不明白为什么需要问这些问题,而不仅仅是阅读标准来了解。
-
虽然这在概念上类似于对所有元素的谓词结果进行 ORing,但在大多数情况下,它可能不会使用
operator ||展开为单个语句,所以我不认为这确实表明短路是否会以任何一种方式发生......虽然可以肯定,常识确实如此。 -
@underscore_d:我不相信这一点。在我撰写本文时,唯一的答案似乎排除了 C++ 标准库对排序容器的潜在优化。否则将使用 O(log N) 类型的方法。它仍然可以,但它必须沿着容器向后跟踪以挑选出满足条件的第一个元素。正是这种细节使这个问题成为一个非常好的问题。
-
致投票结束此事件的人主要基于意见:什么?
标签: c++ c++11 stl language-lawyer