我想从std::string
计算空格。 std::count_if
的任务非常简单,所以我写了这段代码:
std::cout<<std::count_if(str.cbegin(), str.cend(), &std::isspace);
和...编译器错误(xcode):No matching function for call to 'count_if'
我改为:
std::cout<<std::count_if(str.cbegin(), str.cend(), &isspace);
并且编译器错误不再存在。
你能解释一下第一行有什么问题吗?当函数在命名空间中时获取函数指针时我是否遗漏了某些内容?这与ADL相关的是isspace
和count_if
来自同一名称空间吗?
编辑:
完成构建日志:
应用程序/ Xcode.app /内容/开发商/工具链/ XcodeDefault.xctoolchain / usr / lib中/ C ++ / V1 /算法:1097:1: 候选模板被忽略:无法推断模板参数 '_Predicate'
答案 0 :(得分:3)
错误与包含(订单和/或在线状态)有关。
有两个std::isspace
函数,一个接受一个参数,另一个接受2个参数。第一个在<cctype>
中声明,第二个在<locale>
中声明。
int isspace ( int c );
和
template <class charT>
bool isspace (charT c, const locale& loc);
通常,使用C ++ 11,计数可以写为
std::count_if(str.cbegin(), str.cend(), [](char c) {
return std::isspace(c, std::locale());
});