我正在寻找一种大写标准字符串的方法.我找到的答案包括以下代码:
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))"吗?我发现的所有其他构建示例和描述仅使用简单类型转换表达式.
它实际上是一个简单的类型转换 - 但是对于函数指针类型.
std::toupper有两种口味.一个人拿走int并返回int; 其他需要int和const locale&并返回int.在这种情况下,它是第一个需要的,但编译器通常无法知道这一点.
(int(*)(int))是对函数指针的强制转换,它接受int(右手部分)并返回int(左手部分).只有第一个版本toupper可以像这样,所以它消除了编译器的歧义.
| 归档时间: |
|
| 查看次数: |
524 次 |
| 最近记录: |