关于C++中tolower函数的(int (*)(int))强制类型转换问题
把
(int (*)(int))tolower的来龙去脉给你讲明白 嗨,这个看似绕人的语法其实就是给编译器“指方向”的,我给你拆解开唠清楚:
先搞懂为啥需要这个转换
你用的transform算法,要求传入的函数必须是**“接收一个int参数,返回int值”**的类型。但问题在于,标准库里的tolower其实有好几个“分身”(或者说编译器会因为C/C++兼容的问题,对tolower的类型产生歧义),编译器自己没法判断你要给transform的是哪一个分身,这时候就得咱们手动给它明确指令。
(int (*)(int))到底是啥?
这是一个函数指针类型的强制转换,翻译成人话就是:
告诉编译器:把
tolower这个函数的地址,转换成「指向“接受int参数、返回int的函数”的指针」类型。
打个生活化的比方:就像你去超市拿购物袋,货架上有大中小三种,你得跟服务员说“我要中号的”——这个转换就是在跟编译器说“我要的是这个类型的函数指针,别拿错了”。
为啥你自己写的myToLower不用转换?
你写的int myToLower(int c){ return tolower(c); },函数签名明明白白就是int(int),完全符合transform的要求,编译器一眼就能认出来,所以直接传函数名就行,不用多此一举做转换。
内容的提问来源于stack exchange,提问作者biocyberman
相关产品推荐
相关产品推荐

