复杂的C样式类型转换表达式如何工作?

MF *_*aur 3 c++ casting

我正在寻找一种大写标准字符串的方法.我找到的答案包括以下代码:

int main()
{
    // explicit cast needed to resolve ambiguity
    std::transform(myString.begin(), myString.end(), myString.begin(),
      (int(*)(int)) std::toupper)
}
Run Code Online (Sandbox Code Playgroud)

有人能解释一下铸造表达式"(int(*)(int))"吗?我发现的所有其他构建示例和描述仅使用简单类型转换表达式.

Cho*_*ett 5

它实际上是一个简单的类型转换 - 但是对于函数指针类型.

std::toupper有两种口味.一个人拿走int并返回int; 其他需要intconst locale&并返回int.在这种情况下,它是第一个需要的,但编译器通常无法知道这一点.

(int(*)(int))是对函数指针的强制转换,它接受int(右手部分)并返回int(左手部分).只有第一个版本toupper可以像这样,所以它消除了编译器的歧义.