相关疑难解决方法(0)

在调用toupper(),tolower()等之前,是否需要转换为unsigned char?

不久之前,StackOverflow上有一个声誉很高的人在评论中写道,在调用(和类似的函数)之前必须抛出一个char-argument .unsigned charstd::toupper

另一方面,Bjarne Stroustrup没有提到在C++ - Programming Language中这样做的必要性.他只是std::tolower喜欢用

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"
} 
Run Code Online (Sandbox Code Playgroud)

(引用自该书,第4版.)

参考文献说输入需要表示为toupper.对我来说,这听起来像每个unsigned char以后都有,char并且char具有相同的大小.

那么这个演员是不必要的还是Stroustrup不小心?

编辑:libstdc ++手册提到输入字符必须来自基本源字符集,但不会强制转换.我想这是由@Keith Thompson的回复所涵盖的,他们都有积极的表现unsigned charsigned char

c++ undefined-behavior language-lawyer toupper tolower

30
推荐指数
2
解决办法
2841
查看次数