c++ - tolower 发生了什么事?

标签 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))

最佳答案

您可以在 my answer 中看到这个答案,那是一个函数指针。您可以在这里阅读更多关于它们的信息:http://en.cppreference.com/w/cpp/language/pointer#Pointers_to_functions

从根本上说,这是一个指向接受 int 参数并返回 int 的函数的指针。


transform 在使用 myToLower 而不是未转换的 tolower 时起作用的原因是,在代码中 tolower 函数在 std 命名空间中被语言环境库的 tolower 重载。和 ctype 库的 tolower .当仅将函数名称用作未转换指针时,不会执行重载决策,并且您会收到错误。当您强制转换函数指针时,您是在告诉编译器您想要哪个重载。

关于c++ - tolower 发生了什么事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50390309/

相关文章:

c++ - 就内存使用而言,模板 + 仿函数/lambdas 不是最理想的吗?

Java数据库交互模式

c - 具有不同参数列表的函数指针赋值

c++ - 我应该创建一个临时对象来实例化 C++ 中的成员变量吗?

c++ - 编译器找不到重载

c++ - 修复了 VSync 打开时的时间步长卡顿

java 8 Collector<String, A, R> 不是函数式接口(interface),谁能告诉我为什么?

c - 这个C代码片段是什么意思?

c++ - 转换 cpp 函数以在 r 中使用

C++/Qt获取指向指针的指针的值