Полагаю, что char
может иметь различный базовый тип в зависимости от архитектуры.
При неявном литье, unsigned char
может стать и int
или unsigned int
.Разрешает ли символ между подписанным и unsigned int неуказанным?
Означает ли, что следующий код имеет неопределенное поведение?
#include <iostream>
void function(unsigned int){
std::cout << "unsigned\n";
}
void function(int){
std::cout << "signed\n";
}
int main() {
char c;
function(c);
}
У меня нет предупреждений компилятора. Всегда ли оно решит «подписаться»?
До тех пор, как 'sizeof int> sizeof char', да. –
Точнее, если 'int' может представлять каждое значение, которое может быть' unsigned char'. Следствием этого является практически то, что 'sizeof int> sizeof char (= 1)'. – Peter
Возможный дубликат [Нужно ли передавать тэг без знака перед вызовом toupper?] (Http://stackoverflow.com/questions/21805674/do-i-need-to-cast-to-unsigned-char-before-calling -toupper) –