【发布时间】:2010-09-30 20:07:52
【问题描述】:
在 C++ 中,sizeof('a') == sizeof(char) == 1。这很直观,因为'a' 是字符文字,而sizeof(char) == 1 是标准定义的。
然而,在 C 中,sizeof('a') == sizeof(int)。也就是说,看起来 C 字符文字实际上是整数。有谁知道为什么?我可以找到很多关于这个 C 怪癖的提及,但没有解释它为什么存在。
【问题讨论】:
-
sizeof 只会返回一个字节的大小,不是吗? char 和 int 的大小不相等吗?
-
这可能取决于编译器(和架构)。敢说你在用什么吗?标准(至少到 89 年)非常宽松。
-
没有。 char 总是 1 字节大,因此 sizeof('a') == 1 总是(在 c++ 中),而 int 理论上可以 sizeof 为 1,但这需要一个字节至少16 位,非常不太可能 :) 所以 sizeof('a') != sizeof(int) 在大多数实现中的 C++ 中非常可能
-
...虽然在 C 中总是错误的。
-
'a' 是 C 中的 int - 句点。 C首先到达那里-C制定了规则。 C++ 改变了规则。您可以争辩说 C++ 规则更有意义,但更改 C 规则弊大于利,因此 C 标准委员会明智地没有触及这一点。