"'"是否与 C/C++ 标准中的"'"相同?

Is "'" identical to "'" as per the C/C++ standard?

本文关键字:相同 是否 C++ 标准      更新时间:2023-10-16
int main()
{
    char* str1 = "Tom's cat";
    char* str2 = "Tom's cat";
}

代码可以使用VS 2015进行编译。

我只是想知道:

这两种方式是否符合 C 和/或 C++ 标准?

来自C++11 ISO Standard

§ 2.14.5 字符串文字 [lex.string]

15 非原始字符串文字中的转义序列和通用字符名称与字符文字 (2.14.3( 中的含义相同,只是单引号 ' 可以由其本身或转义表示序列 '

是的,在字符串文本中,两者是相同的。

转义版本是字符文本所必需的:

char x = ''';

标准参考文献有两个来源。首先,翻译阶段。来自C.11 §5.1.1.2(C++.11 [lex.phases]有类似的语言(:

    字符
  1. 常量和字符串文本中的每个源字符集成员和转义序列都转换为执行字符集的相应成员;如果没有相应的成员,则将其转换为 null(宽(字符以外的实现定义成员。

接下来是字符常量和字符串文本的语法定义,允许转义序列。简单转义序列是语法中的转义序列。C.11 §6.4.4.4 定义了它(C++.11 [lex.ccon] 具有相同的定义(:

简单转义序列:以下之一

' " ? \
a b f n r t v

最后,对于字符串文字,标准指定文字中字符的解释与每个字符常量相同,然后对'例外。来自 C.11 §6.4.5(C++.11 [lex.string] 有类似的语言(:

相同的注意事项适用于字符串文本中序列的每个元素,就好像它一样 在整数字符常量中(对于字符或 UTF−8 字符串文字(或宽 字符常量(对于宽字符串文本(,但单引号 ' 可以由其本身或转义序列表示 ' ,但双引号 " 应由转义序列表示 "

' 是 C 和 C++ 中的有效字符转义序列。因此,线条

char* str1 = "Tom's cat";
char* str2 = "Tom's cat";

生成 C 和 C++ 格式的等效字符串文本。

是的,它们是相同的。

从 c++ 标准中,$2.13.3/7 字符文字 [lex.ccon]

表 6 — 转义序列

new-line         NL(LF) n
horizontal tab   HT     t
vertical tab     VT     v
backspace        BS     b
carriage return  CR     r
form feed        FF     f
alert            BEL    a
backslash              \
question mark    ?      ?
single quote     ’      ’
double quote     "      "
octal number     ooo    ooo
hex number       hhh    xhhh
相关文章: