"'"是否与 C/C++ 标准中的"'"相同?
Is "'" identical to "'" as per the C/C++ standard?
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]有类似的语言(:
字符
- 常量和字符串文本中的每个源字符集成员和转义序列都转换为执行字符集的相应成员;如果没有相应的成员,则将其转换为 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
相关文章:
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- 检查函数返回类型是否与STL容器类型值相同
- 检查 2 棵树是否具有相同的顺序
- 如果中的多个语句是否与多个 if 相同?
- 使用 ImageIO.read() 生成的图像是否仍然使用传递给它的相同内存?
- 初始值设定项列表是否只接受使用相同类型的值初始化变量?
- 并发/多线程:是否可以以这种方式生成相同的输出?
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 声明后,gcc 的动态大小数组是否与标准数组有效相同?
- 在 Eclipse 中添加库的工作方式是否与在 Visual Studio 中相同?
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- 是否保证相同内容字符串文本的存储相同?
- 函数参数的名称与调用函数时使用的变量相同是否有效?
- 选择排序时交换函数调用的数量和完成的交换次数是否相同?
- 找到 x^n 的所有组合,并检查它们的总和是否等于一个不包括相同数字的数字
- 检查两个模板参数是否相同