【问题标题】:What is the difference between '\n' or "\n" in C++?C++ 中的 '\n' 或 "\n" 有什么区别?
【发布时间】:2011-04-30 22:12:12
【问题描述】:

我已经看到新行 \n 在我一直在查看的几个代码示例中使用了 2 种不同的方式。第一个是'\n',第二个是"\n"。有什么区别,为什么要使用'\n'

我知道'\n' 代表一个字符,"\n" 代表一个字符串,但这有关系吗?

【问题讨论】:

    标签: c++ newline


    【解决方案1】:

    '\n' 是一个char 常量。

    "\n"const char[2]

    所以用法是这样的:

    char newLine = '\n';
    const char* charPointerStringNewLine = "\n"; // implicit conversion
    const char charStringNewLine[2] = "\n";
    
    string stringNewLine( "\n" );
    

    简而言之:一个是指向字符数组的指针,另一个是单个字符。

    【讨论】:

    • "\n"const char[2],而不是 const char*。不过,前者可以隐式转换为后者。
    【解决方案2】:

    '\n' 是一个字符文字。 "\n" 是一个字符串文字(基本上是一个字符数组)。

    如果您将其写入普通流,差异并不重要。 std::cout << "\n";std::cout << '\n'; 效果一样。

    在几乎所有其他情况下,差异都很重要。 char 通常不能与字符数组或字符串互换。

    例如,std::string 有一个采用 const char* 的构造函数,但它没有采用 char 的构造函数。你可以写std::string("\n");,但std::string('\n'); 不能编译。

    std::string 也有一个构造函数,它接受 char 和复制它的次数。它没有一个需要const char* 和复制它的次数。所以你可以写std::string(5,'\n') 并得到一个由连续5个换行符组成的字符串。你不能写std::string(5, "\n");

    您使用的任何函数或操作都会告诉您它是为 char 定义的、为 C 样式的字符串定义的、通过重载定义的,还是两者都不定义。

    【讨论】:

    • 错字!忘记了第二种情况下的斜线:std::cout << '\n';.
    【解决方案3】:

    我知道 '\n' 代表一个字符,而 "/n" 代表一个字符串,但这有关系吗?

    如果您理解这一点,那么应该清楚它确实很重要。 C++ 标准库中的重载函数通常会隐藏这一事实,因此也许 C 中的一个示例会更有用:putchar 采用单个字符,因此只有 '\n' 是正确的,而 putsprintf 采用字符串,在这种情况下,只有"\n" 是正确的。

    【讨论】:

      【解决方案4】:

      '\n'是一个字符常量。

      "\n" 是一个指向字符数组的指针,相当于{'\n', '\0'}\n 加上空终止符)

      编辑

      我意识到我解释了差异,但没有回答问题。

      你使用哪一个取决于上下文。如果您正在调用一个需要字符的函数,则使用 '\n',如果需要字符串,则使用 "\n"

      【讨论】:

        【解决方案5】:

        单引号表示一个字符,双引号表示一个字符串。根据上下文,您可以选择使用哪种数据类型。

        【讨论】:

          猜你喜欢
          • 2011-04-28
          • 2011-04-18
          • 1970-01-01
          • 2016-04-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-31
          • 2011-02-06
          相关资源
          最近更新 更多