【发布时间】:2014-03-15 08:49:05
【问题描述】:
不久前,在 Stack Overflow 上享有盛誉的人在评论中写道,在调用 std::toupper 和 std::tolower(以及类似函数)之前,有必要将 char-argument 转换为 unsigned char。
另一方面,Bjarne Stroustrup 在C++ 编程语言中没有提到这样做的必要性。他只是使用toupperlike
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 版。)
The reference 表示输入需要可以表示为unsigned char。
对我来说,这听起来似乎适用于每个char,因为char 和unsigned char 具有相同的大小。
那么这个演员阵容是不必要的还是 Stroustrup 粗心的?
编辑:libstdc++ manual 提到输入字符必须来自basic source character set,但不强制转换。我想@Keith Thompson 的回复已经涵盖了这一点,他们都有一个积极的表示为signed char 和unsigned char?
【问题讨论】:
-
如果可能的话,如果您能发布评论的链接,那就太好了。
-
You may find this an interesting read,
[c] toupper cast的热门歌曲之一。
标签: c++ language-lawyer undefined-behavior toupper tolower