In C :
#include <stdio.h>
int main(){
char a = 'a';
printf("Size of char : %d\n",sizeof(a));
printf("Size of char : %d\n",sizeof('a'));
return 0;
}
Output :
Size of char : 1
Size of char : 4
In C++ :
#include <iostream>
int main(){
char a = 'a';
std::cout<<"Size of char : "<<sizeof(a)<<"\n";
std::cout<<"Size of char : "<<sizeof('a')<<"\n";
return 0;
}
Output :
Size of char : 1
Size of char : 1
為什麼sizeof('a')返回的值在C與C++中是不同的?
C99標準的規定,'a'叫做整型字元常量(integer character constant),被看成是int型,所以在32位機器上佔4位元組。
ISO C++標準規定,'a'叫做字元字面量(character literal),被看成是char型,所以佔1位元組。
C99:
An integer character constant is a sequence of one or more multibyte characters enclosed
in single-quotes, as in 'x'. An integer character constant has type int.
C++2003:
A character literal is one or more characters enclosed in single quotes, as in ’x’, optionally preceded by the letter L, as in L’x’.A character literal that does not begin with L is an ordinary character literal, also referred to as a narrow-character literal. An ordinary character literal that contains a single c-char has type char, with value equal to the numerical value of the encoding of the c-char in the execution character set. An ordinary character literal that contains more than one c-char is a multicharacter literal. A multicharacter literal has type int and implementation-defined value.