c++ - C/C++ 中的单引号、双引号和 sizeof ('a' )

标签 c++ c gcc

我在看问题 Single quotes vs. double quotes in C or C++ .我无法完全理解给出的解释,所以我编写了一个程序:

#include <stdio.h>
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++ 编译它们,这些是我的输出:

gcc:

sizeof(ch)   : 1  
sizeof('a')  : 4  
sizeof("a")  : 2  
sizeof(char) : 1  
sizeof(int)  : 4  

g++:

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';,我们是在做隐式类型转换吗?

最佳答案

在 C 中,'a' 等字符常量的类型为 int,在 C++ 中为 char

关于最后一个问题,是的,

char ch = 'a';

导致 intchar 的隐式转换。

关于c++ - C/C++ 中的单引号、双引号和 sizeof ('a' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10606807/

相关文章:

C++ 混合 printf 和 cout

c# - 如何检查驱动程序代码签名策略是否已启用并且实际有效?

c++ - 如何追加到g++中的文本文件的开头

c++ - 将 C++ 与 Android ndk/jni 一起使用

c++ - C++中的回调函数有什么用?

linux - 设置 ostream linux/visual studio 的指数字段的宽度

c - 如何利用 CPU 特定功能编译 C 代码

c++ - 调试 .DLL 注入(inject)问题 - 假定执行代码未被命中的断点

使用 fscanf 从文件中的数据生成数组时出现 C 段错误

bash - 如何通过管道传递 gcc 或 gfortran 警告和错误