template<typename InputIterator, typename Predicate>
inline InputIterator
find_if(InputIterator first, InputIterator last, Predicate pred, input_iterator_tag)
{
while (first != last && !bool(pred(*first)))
++first;
return first;
}
我碰到了this snippet在 GCC 4.7.0 附带的 C++ 标准库的实现的源代码中。这是输入迭代器的 find_if
的特化。我清理了前导下划线以使其更具可读性。
为什么他们在谓词上使用 bool
类型转换?
最佳答案
原因是仅仅编写 !pred(*first)
可能会导致调用重载的 operator!
而不是调用 explicit operator bool
.
有趣的是,这个措施是针对 pred
采取的,但是在提供的实现中仍然可以选择重载的 operator&&
。 first != last
需要更改为 bool(first != last)
以防止这种过载。
关于c++ - 为什么需要强制转换为 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21831094/