Я пытаюсь понять весь спектр функций синтаксиса инициализатора {} .
Я скомпилировал следующий код с g ++:
int i = 0; /* OK */
short int si2 {i}; /* Warning: Narrowing Conversion inside {...} */
char myChar {127ULL}; /* OK */
char myChar2 {128ULL}; /* Warning: Narrowing Conversion inside {...} */
Мое понимание предупреждения об инициализации si2 следующее. В моей системе: - short int - 2 байта - int - 4 байта
Поскольку инициализатор в два раза больше (в байтах), чем LHS, это составляетсужение и, следовательно, предупреждение компилятора.
Однако для myChar и myChar2 оба инициализатора имеют одинаковый тип данных: unsigned long long int . Я считаю, что инициализация myChar2 произошла из-за того, что значение инициализатора было бы слишком большим для типа данных char .
те же правила, похоже, не применяютсяв обоих этих случаях: 1. Сбой из-за того, что тип инициализатора слишком велик для инициализированной переменной 2. Сбой из-за того, что значение слишком велико для инициализированной переменной (хотя тип данных RHS здесь допустим)
Правильно ли мое понимание здесь - верно лиСписок инициализаторов ведет себя иначе, если аргумент является целочисленным литералом?