Некоторое время назад кто-то с высокой репутацией здесь, в Кару, написал в комментарии, что необходимо наложить char
-argument на unsigned char
перед вызовом std::toupper
и std::tolower
(и аналогичных функций).
С другой стороны, Бьярн Страуструп не упоминает об этом на языке программирования 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
имеют одинаковый размер.
Так что этот актёрский состав ненужен или Страуструп небрежен?
Редактировать: руководство libstd C++ упоминает, что вводимый символ должен быть из базового исходного набора символов, но не приводится. Я предполагаю, что это покрыто ответом @Keith Thompson, все они имеют положительное представление как signed char
и unsigned char
?