C++ 为什么这个计划是';C和C之间的输出不同++;?
可能重复:C++ 为什么这个计划是';C和C之间的输出不同++;?,c++,c,gcc,g++,C++,C,Gcc,G++,可能重复: 以下程序 #include <stdio.h> int main() { printf("%d\n", sizeof('\0')); printf("%d\n", sizeof(0)); } 和g++ 1 4 为什么会这样?我知道这不是编译器的事情,而是C和C++之间的区别,但是什么原因?< /P> < P> 0 C字符字符在C中被当作是 int >代码,所以你实际上结束了打印 siZeof(int)< /C> >而不是 siZeof(char
以下程序
#include <stdio.h>
int main()
{
printf("%d\n", sizeof('\0'));
printf("%d\n", sizeof(0));
}
和g++
1
4
为什么会这样?我知道这不是编译器的事情,而是C和C++之间的区别,但是什么原因?< /P> < P> <代码> 0 C字符字符在C中被当作是<代码> int >代码,所以你实际上结束了打印<代码> siZeof(int)< /C> >而不是<代码> siZeof(char)< /C> >
ideone
给出了相同的结果(,)。在C字符中,文字是整数。在C++中,字符是字符,在C中,字符常量<强> >标准为“<代码> int />代码> >64.4.4(10),
整型字符常量的类型为int。整型字符常量的值
包含映射到单字节执行字符的单个字符是
被解释为整数的映射字符表示形式的数值
因此,您将打印两次int
的大小
<>在C++中,字符常量有类型<代码> char < /c> > /p> < p>输出已经是编译器依赖的,因为您使用了错误的格式规范,用于<代码> siZeStt < /Cord> >这将是<代码> %ZU。在
size\u t
宽度大于int
的64位系统上,这可能会给您带来任何类型的垃圾
否则,此舒尔取决于编译器。在C和<代码> char < />代码>和
short
测试使用强制转换。当然,无法表示short
文字,因此即使是short
中的值也会从一开始就被解析为int
。事实上,如果一个未来的short
literal与char
one的处理方式相同,那将是一件很有趣的事情……但是你的评论并没有涉及到literal,而是涉及到值。而且,由于C除了int
之外没有任何整数文本,如果它谈论的是文本(而不是值),那么这个注释就没有意义了。@Konrad,啊,我实际上是在谈论文本(int
和char
的,因为short
文本实际上并不存在),不是价值观。我同意我的评论模棱两可,不过,我可能应该找到更好的表达方式。更像是语言依赖!出于好奇,你为什么要这么做?
1
4