【问题标题】:C++ Programming Principles "\n" or '\n' [duplicate]C++ 编程原则“\n”或“\n”[重复]
【发布时间】:2016-02-04 17:04:11
【问题描述】:

好的,我正在研究 Bjarne 书中的例子。而且我知道单个字符由单引号分隔,例如'x'。

然后是用双引号分隔字符串,比如“Hello,!”

在这本书中,有时这是有意义的,有时是没有意义的。

例如:

cout << "Hello, " << first <<" << second << '\n';   //doesn't /n have single quotes?

cout << "Hello, " << first_name << " (age " << age << ")\n"; // why does /n have double quotes around it?

如果有人能解释这两个示例之间的语法差异,将不胜感激。

编辑-----------

cout

【问题讨论】:

  • 单个字符可以是字符串。 \n 不是特殊情况。 “a”和“a”都有效
  • 在第二个示例中,您需要双引号,因为引号中也有 )。单引号仅用于字符。因此,由于 \n 是一个字符,您可以将其包含在单引号中,但 )\n 是两个字符,因此您需要双引号来表示字符串
  • 如果你想有原则,那么你会使用 std::endl
  • 查看另一个related question
  • 在“\n”中,“\”是escape character。这意味着下一个字符具有特殊意义。在这种情况下,\n 表示“n”不是“n”,它是行尾。编译器将始终尝试将 '\' 之后的字符解释为特殊字符。如果你真的想要一个'\',你必须转义'\'并使用'\\'。

标签: c++ syntax newline


【解决方案1】:

编译器将字符(或字符串)文字中的序列\n 识别为单个字符,即换行符。这就是为什么它可以在单引号中用作字符文字。

在第二行中,换行符在双引号内,因为它不是单个字符文字,而是包含字符 )\n(加上字符串终止符)的字符串。

【讨论】:

    【解决方案2】:

    不同之处在于,'x'char"x" 是长度为 2(字符 x 和 null)的 c 字符串 (const char*)。在您的示例中,这没有区别,因为 ostream 运算符char 和 const char*,但对于 strlenstrcmp 等 c 函数,如果您' 传递一个字符或一个字符串,其中只有一个字符(和空终止符)。

    【讨论】:

    • 认识到\n 是一个字符也很重要,即使它被写成两个字符。
    【解决方案3】:

    \n 被认为是一个字符,即使它是两个字符。它是创建新行的缩写。你也可以使用 endl;命令。我认为它更容易,并且在代码中看起来更好。

    在这种情况下它用双引号引起来,因为它包含多个带有 ) 的字符。在正常情况下,\n 可以放在单打 '' 或双打 "" 中。

    *注意你只能使用endl;如果您已声明您正在使用命名空间 std; 否则为 std::endl;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 2013-01-10
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      相关资源
      最近更新 更多