【问题标题】:What is the difference between 'a' and "a"?'a' 和 "a" 和有什么不一样?
【发布时间】:2012-07-02 00:12:30
【问题描述】:

我正在学习 C++,但有一个我找不到答案的问题。

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

我的所有搜索结果都与 char 数组 vs std::string 相关。我追求'a'"a" 之间的区别。

执行以下操作会有区别吗:

cout << "a";
cout << 'a';

【问题讨论】:

  • 尝试输入多个字符并观察差异。

标签: c++ string char


【解决方案1】:

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

"a" 是一个字符串文字。它的类型为const char[2],引用了一个包含2 个chars 的数组,其值为'a''\0'。在大多数(但不是全部)上下文中,对 "a" 的引用将被隐式转换为指向字符串第一个字符的指针。

两者

cout << 'a';

cout << "a";

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

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

(在您没有询问的 C 中,'a' 的类型为 int,而"a" 的类型为 char[2](没有 const)。

【讨论】:

  • 谢谢,字符串文字是否与#include 中包含的类型相同?
  • @james,不是,后者是封装了前者的类,使用起来方便很多。
  • @james:不,字符串字面量的类型为const char[],但&lt;string&gt; 定义了std::string 类型。 C++ 继承自 C 的字符串文字; std::string 特定于 C++。
  • @chris:除了std::string 不是由'\0' 空字符终止。
  • 我确实认为值得注意的是,这是 C 与 C++ 的不同之处,这是许多人所未预料到的。正如您(完全正确)所说,在 C++ 中,像 'a' 这样的字符文字的类型为 char - 但在 C 中,它的类型为 int
【解决方案2】:

"a" 是一个字符数组,恰好只包含一个字符,或者如果你在末尾计算 \0 则包含两个字符。 'a' 是一个字符。他们不是一回事。例如:

#include <stdio.h>

void test(char c) {
    printf("Got character %c\n", c);
}

void test(const char* c) {
    printf("Got string %s\n", c);
}

int main() {
    test('c');
    test("c");
}

这将使用两个不同的重载;有关演示,请参阅 http://codepad.org/okl0UcCN

【讨论】:

  • printf/stdio.h 最好避免作为阐明 C++ 问题的工具......! :-/
【解决方案3】:

单引号用于包围字符文字。双引号用于包围字符串(字符数组)文字。

许多接口,例如cout &lt;&lt;,都接受。

【讨论】:

    【解决方案4】:

    单引号'a'char 类型的文字。双引号 "a"chars 的以 null 结尾的字符串文字。

    【讨论】:

      【解决方案5】:
      • "a" -> 它表示它是一个字符串。在 c++ 中,字符串是一个集合 字符数组。
      • 所以字符串以delimiter '\0'结束,表示字符串结束。
      • 所以它的大小将是 2,因为“a”为 1 字节,“\0”为 1 字节

      如果是 'a'-> 它是单个字符。所以它的大小是 1 字节。

      char str[]="a"; 
      

      char *ptr = "c";
      
      for  'c' -> char c = 'a';
      

      或者我们也可以写

      char c = 97;
      

      【讨论】:

        【解决方案6】:

        'a' - 1) 字符常量 2) 大小 - 1 个字符 3) 不是字符数组的集合

        "a" -1) 字符串字面量 2) 大小 - 2 个字符 3) 字符数组的集合

        【讨论】:

          猜你喜欢
          • 2018-01-31
          • 2020-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多