Подтвердить что ты не робот

Char ошибка времени компиляции массива при присвоении значения из массива

Итак, у меня есть этот код

char [] a = {'a','b','c'};

char c = 'a' + 'b'; //works
char c2 = 98 + 97; //works
char c3 = a[0] + a[1]; //compile time error

Таким образом, все они имеют одинаковую функциональность, но при получении и использовании значения массива он дает мне ошибку времени компиляции. В чем причина этого?

The result of the additive operator applied two char operands is an int.

то почему я могу это сделать?

char c2 = (int)((int)98 + (int)97);
4b9b3361

Ответ 1

Результатом аддитивного оператора, применяемого двумя операндами char, является int.

В операндах выполняется двоичное числовое продвижение. Тип аддитивного выражения для числовых операндов - это продвинутый тип его операндов

Первые два являются постоянными выражениями, где результирующее значение - это int, которое можно безопасно назначить char.

Третий не является постоянным выражением, поэтому компилятор не может гарантировать никаких гарантий.

Аналогично

то почему я могу это сделать?

char c2 = (int)((int)98 + (int)97);

Это также постоянное выражение, и результат может поместиться в char.

Попробуйте с большими значениями 12345 и 55555.