Нужно ли мне приводить к беззнаковому символу перед вызовом toupper(), tolower() и др.?C++

Программы на C++. Форум разработчиков
Anonymous
Нужно ли мне приводить к беззнаковому символу перед вызовом toupper(), tolower() и др.?

Сообщение Anonymous »

Недавно кто-то с высокой репутацией здесь, в Stack Overflow, написал в комментарии, что необходимо привести аргумент char к 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-е издание.)
В ссылке говорится, что ввод должен быть представлен как беззнаковый символ.
Для меня это звучит так, как будто это справедливо для каждого символа, поскольку char и беззнаковый символ имеют одинаковый размер.
Так что это приведение ненужно или это было Страуструпом небрежно?
Изменить: в руководстве libstdc++ упоминается, что входной символ должен быть из базового исходного набора символов, но не выполняется приведение. Я думаю, это описано в ответе @Keith Thompson, все они имеют положительное представление как знаковый символ и беззнаковый символ?

Подробнее здесь: https://stackoverflow.com/questions/218 ... ower-et-al

Вернуться в «C++»