'a'和"a"有什么区别?

jam*_*mes 7 c++ string char

我正在学习C++并且有一个我无法找到答案的问题.

char常量(使用单引号)和字符串常量(带双引号)之间有什么区别?

我的所有搜索结果都与char arrays vs相关std::string.我之间的差额后'a'"a".

执行以下操作会有所不同:

cout << "a";
cout << 'a';
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 24

'a'是一个字符文字.它是类型char,大多数系统的值为97(字母的ASCII/Latin-1/Unicode编码a).

"a"是一个字符串文字.它是类型const char[2],并且是指char带有值'a'和的2 s 数组'\0'.在大多数但不是全部的上下文中,引用"a"将被隐式转换为指向字符串第一个字符的指针.

cout << 'a';
Run Code Online (Sandbox Code Playgroud)

cout << "a";
Run Code Online (Sandbox Code Playgroud)

碰巧产生相同的输出,但出于不同的原因.第一个打印单个字符值.第二个连续打印字符串的所有字符(终止除外'\0') - 恰好是单个字符'a'.

字符串文字可以任意长,例如"abcdefg".字符文字几乎总是只包含一个字符.(你可以有多字符文字,例如'ab',但它们的值是实现定义的,它们很少有用.)

(在C中,你没有问过,'a'是类型int,"a"类型char[2](不const)).

  • @chris:除了'std :: string`没有被''\ 0'`空字符终止. (3认同)
  • @james:不,字符串文字的类型是`const char []`,但`<string>`定义了一个类型`std :: string`.C++从C继承了字符串文字; `std :: string`特定于C++. (2认同)
  • 我认为值得注意的是,这是一个C语言与C++不同的领域,很多人都没有想到.正如你(完全正确地)所说,在C++中,像''a'这样的字符文字类型为`char` - 但在C中,它的类型为`int`. (2认同)