- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
令我惊讶的是,以下代码可以编译:
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <cctype>
int main() {
std::string s="nawaz";
std::string S;
std::transform(s.begin(),s.end(), std::back_inserter(S), ::toupper);
std::cout << S ;
}
我原以为它会失败,因为我认为 ::toupper
应该在 std
命名空间中。快速检查 cctype 显示它是,但它是从根 namespace 导入的(在那里解决了谜题)。
namespace std
{
// Other similar `using` deleted for brevity.
using ::toupper;
}
所以第一个问题解决了,但是如果我也更改上面的 transform()
行:
std::transform(s.begin(),s.end(), std::back_inserter(S), std::toupper);
我现在希望它现在也可以编译。但我得到一个编译器错误:
kk.cpp:12: error: no matching function for call to `transform(__gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char*, std::basic_string<char, std::cha r_traits<char>, std::allocator<char> > >, std::back_insert_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, <unresolved overloaded function type>)'
手动编辑也解决了:
kk.cpp:12: error: no matching function for call to
`transform(iterator<std::string>,
iterator<std::string>,
std::back_insert_iterator<std::string>,
<unresolved overloaded function type>)'
我错过了什么?
最佳答案
它不起作用,因为有 std::toupper
的重载。您可以通过强制转换为所需的函数重载来修复它:
std::transform(s.begin(),s.end(), std::back_inserter(S),
(int(&)(int))std::toupper);
关于c++ - cctype 是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5409791/
令我惊讶的是,以下代码可以编译: #include #include #include #include #include int main() { std::string s="na
试图解决一位讲师给我的问题,但我无法理解如何正确调用它。 我得到了一个链接到测试驱动程序的函数,我的目标是使用 cstring 库通过此函数在随机生成的字符串对象中查找 0-9 范围内的任何数字。 i
C 编程语言表示来自 的函数遵循一个共同的要求: ISO C99, 7.4p1: In all cases the argument is an int, the value of which sh
我想将一些文件(大约 1000 个)拆分为单词并删除数字和标点符号。然后我将相应地处理这些标记化的词......但是,这些文件大部分是德语,并且以不同的类型编码: ISO-8859-1 ISO Lat
为什么大多数 C++ 编译器都能够推断出 ::isspace 的类型并将其隐式转换为 std::function,但它们却不能这样做对于 std::isspace? 请参阅the following不
我是一名优秀的程序员,十分优秀!