Я хочу инициализировать этот вектор символов с помощью этих кодов ASCII:
vector <char> a = { 201, 187, 200, 188, 205, 186 };
и я получаю эту синтаксическую ошибку во всех 6 символах:
Недопустимое сужающее преобразование из "int" в "char": постоянное значение не подходит для целевого типа.
но когда я инициализирую одну переменную char с теми же кодами ASCII:
char b = 201;
Это работает нормально.
Так я понял, что в векторах по какой-то причине тип char может принимать значения int до 127. Начиная со 128 появляется синтаксическая ошибка.
Это отличается от обычных переменных, когда тип char может принимать любые значения int.
Я попытался объявить вектор как unsigned char, и синтаксическая ошибка исчезла.
vector <unsigned char> a = { 201, 187, 200, 188, 205, 186 };
Но все равно,
Почему векторы типа char не могут получать те же данные int, что и переменные типа char?
Я действительно был бы признателен, если бы кто-нибудь объяснил мне это поведение.
char b = 201
работает? Потому что вы не получаете предупреждение компилятора? - person smac89   schedule 22.12.2017char b=201
, вы должны добавить ниже этогоstd::cout << "Char c equals 201? " << std::boolalpha << (c == 201) << std::endl;
и посмотреть, что вы получите - person smac89   schedule 22.12.2017-pedantic
. Использование этого флага предупредит вас об этом переполнении, которое вы считали нормальным. - person smac89   schedule 22.12.2017char
, и на самом деле разница не так уж важна. - person Daniel H   schedule 22.12.2017