C++使用toupper函数拼接字符串时匹配不到+运算符问题求解
报错原因说明
核心报错根源
toupper 是定义在 <cctype> 头文件中的函数,它的函数原型为 int toupper(int ch),返回值是int类型,而非你预期的char类型。
第一版代码中直接执行 output + toupper(input[0]) 时,运算符两边的操作数类型分别是 std::string 和 int,C++标准库并没有为 std::string 重载支持string + int 操作的+运算符,因此编译器直接报出类型不匹配的错误。
修改后可正常运行的原因
新增char temp = toupper(input[0]);这行代码时,相当于显式将toupper返回的int类型值转换为了char类型。而std::string的+运算符是支持和char类型操作数相加的,此时output + temp的操作数类型匹配string + char的重载规则,因此可以正常编译运行。
额外使用提示
使用toupper时建议补全<cctype>头文件引入,同时为了避免未定义行为,最好对传入参数做类型转换,规范写法参考:
char temp = static_cast<char>(toupper(static_cast<unsigned char>(input[0])));
如果你的环境中char是带符号类型,当字符值大于127时直接传入toupper会触发未定义行为,上述写法可以规避这个问题。
内容的提问来源于stack exchange,提问作者user16521673
相关产品推荐
相关产品推荐

