前段时间,在 Stack Overflow 上享有盛誉的人在评论中写道,有必要在调用and (和类似函数)之前将char
-argument 转换为。unsigned char
std::toupper
std::tolower
另一方面,Bjarne Stroustrup 没有在C++ 编程语言中提到这样做的必要性。他只是使用toupper
喜欢
string name = "Niels Stroustrup"; void m3() { string s = name.substr(6,10); // s = "Stroustr up" name.replace(0,5,"nicholas"); // name becomes "nicholas Stroustrup" name[0] = toupper(name[0]); // name becomes "Nicholas Stroustrup" }
(引自该书,第 4 版。)
参考资料说输入需要可以表示为unsigned char
。对我来说,这听起来像是它适用于每一个char
,char
并且unsigned char
具有相同的大小。
那么这个演员阵容是不必要的,还是 Stroustrup 粗心的?
编辑:libstdc++ 手册提到输入字符必须来自基本源字符集,但不强制转换。我想@Keith Thompson 的回复已经涵盖了这一点,它们都有一个积极的表示signed char
和unsigned char
?