Ответ 1
Потому что, и это может быть шокирующим, C и С++ не являются одним и тем же языком.
C определяет символьные литералы как имеющие тип int
, тогда как С++ считает, что они имеют тип char
.
Это случай, когда многосимвольные константы могут быть полезны:
const int foo = 'foo';
Это создаст целое число, значение которого, вероятно, будет 6713199 или 7303014 в зависимости от порядка байтов и настроения компилятора. Другими словами, многосимвольные символьные литералы не являются "переносимыми", вы не можете зависеть от того, что полученное значение легко предсказать.
Как отмечают комментаторы (спасибо!), это справедливо и для C и С++, кажется, что С++ делает многосимвольные символьные литералы другим типом. Умно!
Кроме того, в качестве незначительной заметки, которую я хотел бы упомянуть в теме, обратите внимание, что sizeof
не является функцией и что значения size_t
не являются int
. Таким образом:
printf("the size of a character is %zu\n", sizeof 'a');
или, если ваш компилятор слишком стар, чтобы не поддерживать C99:
printf("the size of a character is %lu\n", (unsigned long) sizeof 'a');
представляют собой самый простой и правильный способ печати размеров, которые вы исследуете.