在tolower上发生了什么?

时间:2018-05-17 11:28:09

标签: c++ lambda function-pointers

我正在读这个答案: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))

1 个答案:

答案 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指针时,不会执行重载决策,并且您将收到错误。当您转换函数指针时,您将告诉编译器您想要哪个重载。