【问题标题】:Datatype of escape sequences in c++c++中转义序列的数据类型
【发布时间】:2017-11-17 12:45:35
【问题描述】:

我还是个初学者。

我的一些老师说转义序列是字符,而另一些老师说它们是“特殊”字符串。

它们到底是什么?

【问题讨论】:

  • 字符串是字符序列。这两个答案并不矛盾。
  • 这两种描述都是合理的。

标签: c++


【解决方案1】:

取决于您如何括住转义序列、单引号或双引号。

基本上,转义序列类似于在代码中表示的单个字符,与实际看起来不同。

char ch = '\n'; // This is a character
const char *s = "\n"; // This is a string.

在上面的 C 示例中,\n 在字符串文字或字符文字中表示换行符。将代码编译成二进制时将不再有反斜杠和 Ns - 编译器已将转义序列转换为类似的。

总结:

\n    // an escape sequence (don't use directly)
'\n'  // a character containing an esc seq
"\n"  // a string containint an esc seq

我的理解:

转义序列是用代码编写的字符序列(超过 1 个),这并不意味着它的字面意思,而是另一个字符。编译后会转换成那个字符。

【讨论】:

    【解决方案2】:

    转义序列是一组字符。所以数据类型只取决于你使用它们的方式。

    【讨论】:

      【解决方案3】:

      转义序列用于表示字符串文字和字符文字中的某些特殊字符。

      来自wikipedia

      转义序列用于编程语言 C 和 C++,并且 还有更多语言(有一些变体),如 Java 和 C#。 转义序列是一个字符序列,在字符或字符串字面量中使用时不代表自身,而是 被翻译成另一个字符或字符序列 可能很难或不可能直接表示。

      在 C 中,所有 转义序列都由两个或多个字符组成, 第一个是反斜杠,\(称为“转义字符”); 其余字符决定转义的解释 序列。 例如,\n 是一个转义序列,表示换行符 特点。本文的其余部分侧重于 C;其他 编程语言可能有不同的语法和 语义。

      来自string_literal

      语法

      " (unescaped_character|escaped_character)* "  (1) 
      
      L " (unescaped_character|escaped_character)* "    (2) 
      
      u8 " (unescaped_character|escaped_character)* "   (3) (since C++11)
      
      u " (unescaped_character|escaped_character)* "    (4) (since C++11)
      
      U " (unescaped_character|escaped_character)* "    (5) (since C++11)
      
      prefix(optional) R "delimiter( raw_characters )delimiter" (6) (since C++11)
      

      来自character_literal

      语法

      'c-char' (1)

      u8 ' c-char ' (2) (C++17 起)

      u ' c-char ' (3) (C++11 起)

      U ' c-char ' (4) (C++11 起)

      L'c-char' (5)

      'c-char-sequence' (6)

      在哪里

      • c-char 是

        1. 基本源字符集中的字符减去单引号 (')、反斜杠 () 或换行符,

        2. 转义序列,在转义序列中定义

        3. 通用字符名称,在转义序列中定义

      • c-char-sequence 是两个或多个 c-char 的序列。

        1. 窄字符文字或普通字符文字,例如'a''\n''\13'。此类文字的类型为 char 且值等于 c-char 在执行字符集中的表示。如果 c-char 是 在执行字符集中不能表示为单个字节, 字面量具有 int 类型和实现定义的值

      【讨论】:

      • 这是否意味着将转义序列调用为字符或字符串通常是错误的
      • @JavaRookie 否。它取决于内容。
      • 你的意思是这取决于情况,我的意思是序列的使用方式?
      • @JavaRookie 查看我的回答。 '\n'"\n" 包含 转义序列。它们不是转义序列。形式是一个字符,而后者是一个字符串。
      【解决方案4】:

      转义序列是将源代码中的字符编码为字符的另一种方法。它们最重要的作用是表示不能在代码中直接使用的字符。

      此类字符分为两类:

      • 不可打印的字符(ASCII 码 0..31)、外观依赖于代码页的字符(ASCII 码 128..255)和多字节字符;
      • 对于该语言具有特殊含义的字符,并且该含义与该语言中字符串的表示有关。

      第一类中的字符(NUL character 除外)可以在 C 字符串中单独表示,但在不同的计算机上它们可能看起来很奇怪或不同;他们只是一个烦恼。

      该组中最知名的字符是换行符 (\n)、制表符 (\t) 和 NUL character (\0)。

      不能使用第二类字符,因为它们具有特殊含义。这些字符是引号 (")(它的存在意味着字符串的结尾)和撇号 (')(用于包围字符文字)。

      为了让其中一个成为字符或字符串的语言表示,它们必须被转义。这意味着,在字符串中,\" 代表" 字符,而撇号字符被编码为'\''

      这样,反斜杠字符 (\) 也变得特殊,必须对其进行转义 (\\) 以在字符串或字符中表示自己。

      【讨论】:

        猜你喜欢
        • 2018-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-17
        相关资源
        最近更新 更多