在find()中提供boolean是不好的风格?

Seb*_*itz 2 c++ iterator find

在"Accelerated C++:Example Programming by Example"中,第6.1.3章是find()来自"algorithm"库的示例:

我们想检查a char是否在字符串中:

bool find_char(char c){
    string str = "asdf";
    return find(str.begin(), str.end(), c) != str.end();
}
Run Code Online (Sandbox Code Playgroud)

然后,有一个解释find():

它与find_if类似,不同之处在于它不是调用谓词,而是查找作为第三个参数给出的特定值.与find_if一样,如果存在我们想要的值,则该函数返回一个迭代器,表示给定序列中第一次出现的值.如果找不到该值,则find返回其第二个参数.

这让我想知道为什么我们不使用更短更清洁的版本:

bool find_char(char c){
    string str = "asdf";
    return find(str.begin(), false, c); //does not compile, see Top Answer
}
Run Code Online (Sandbox Code Playgroud)

这被认为是不好的风格?这段代码有问题吗?

Joh*_*nck 5

问题是第二个参数不仅是在大海捞针中找不到针时返回的值,第二个参数也是干草堆本身末端的(指针或迭代器).你false作为第二个参数的例子std::find将不会编译,因为false它不是任何迭代器,并且当然不具有可比性或兼容性std::string::begin(),更不用说形成范围的结束.