Является ли sizeof('ab') равным sizeof(int) в C++?
Учитывая, что у меня есть следующая программа, которая определяет размер многобайтовых символов.
#include<iostream>
int main()
{
std::cout<<"size of multibyte characters : "<<sizeof('ab')<<std::endl;
}
Мой компилятор GCC выдает 4.
Итак, у меня есть следующие вопросы:
- Каков размер многобайтового литерала?
- Является
sizeof('ab')
равноsizeof(int)
?
1 ответ
Это так называемый литерал, состоящий из нескольких символов, который, в отличие от его односимвольного аналога, не относится к типу char
но типа int
(при условии, что это поддерживается). Как указано в [lex.ccon] / 2, выделение мое:
Символьный литерал, который не начинается с u8, u, U или L, является обычным символьным литералом. Обычный символьный литерал, который содержит один символ c-char, представляемый в наборе символов выполнения, имеет тип char со значением, равным числовому значению кодировки c-char в наборе символов выполнения. Обычный символьный литерал, содержащий более одного символа c-char, является литералом с несколькими символами. Литерал из нескольких символов или обычный символьный литерал, содержащий один символ c-char, не представляемый в наборе символов выполнения, поддерживается условно, имеет тип int и имеет значение, определяемое реализацией.
Итак, вы печатаете sizeof(int)
, как вы и подозревали.