我正在读这个答案:https://stackoverflow.com/a/5539302/588867
这一部分发生了什么:(int (*)(int))tolower
在这行代码中:
transform(s.begin(),s.end(),s.begin(),(int (*)(int))tolower );
如果我使用此功能并且代码有效:
int myToLower(int c){
return tolower(c);
}
transform(s.begin(),s.end(),s.begin(), myToLower);
关于这部分的简明英语:(int (*)(int))
。
答案 0 :(得分:2)
你可以在my answer中看到这个答案,这是一个函数指针。您可以在此处详细了解它们:http://en.cppreference.com/w/cpp/language/pointer#Pointers_to_functions
从根本上说,这是一个指向函数的指针,该函数接收int
参数并返回int
。
transform
使用myToLower
而不使用uncast tolower
时的工作原因是代码中的tolower
函数在{{1}中过载语言环境库tolower
和ctype库的tolower
命名空间。当只有函数名称用作uncast指针时,不会执行重载决策,并且您将收到错误。当您转换函数指针时,您将告诉编译器您想要哪个重载。