Я рассматривал вопрос Одинарные и двойные кавычки в C или C++.Я не мог полностью понять данное объяснение, поэтому написал программу:
#include
int main()
{
char ch = 'a';
printf("sizeof(ch) :%d\n", sizeof(ch));
printf("sizeof(\'a\') :%d\n", sizeof('a'));
printf("sizeof(\"a\") :%d\n", sizeof("a"));
printf("sizeof(char) :%d\n", sizeof(char));
printf("sizeof(int) :%d\n", sizeof(int));
return 0;
}
Я скомпилировал их, используя как gcc, так и g++, и вот мои результаты:
sizeof(ch) : 1
sizeof('a') : 4
sizeof("a") : 2
sizeof(char) : 1
sizeof(int) : 4
sizeof(ch) : 1
sizeof('a') : 1
sizeof("a") : 2
sizeof(char) : 1
sizeof(int) : 4
Вывод g++ имеет смысл мне, и я не сомневаюсь в этом. В gcc, что нужно, чтобы sizeof('a')
отличался от sizeof(char)
? Есть ли за этим какая-то реальная причина или это просто историческая причина?
Также в C, если char
и 'a'
имеют разный размер, означает ли это, что когда мы пишем
char ch = 'a';
, мы делаем неявное преобразование типов?