Является ли 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), как вы и подозревали.

Другие вопросы по тегам