C++字符串文字的规则转义字符

Dav*_*one 40 c++ string escaping

\字符串文字中的转义字符有哪些规则?是否有所有转义字符的列表?

特别是,当我\在gedit中的字符串文字中使用并按任意三个数字跟随它时,它会以不同的方式对它们进行着色.

我试图std::string用文字创建一个构造,其中0后跟空字符(\0)后跟字符0.然而,语法突出显示警告我,这可能会创建类似于0后跟空字符(\00,aka \0)的字符,也就是说,只有两个字符.

对于这个问题的解决方案,这是最好的方法:

std::string ("0\0" "0", 3)  // String concatenation 
Run Code Online (Sandbox Code Playgroud)

并且是否存在一些关于转义字符在字符串文字中的作用的参考?例如,'\ a'是什么?

dan*_*n04 61

控制字符:

(十六进制代码假定与ASCII兼容的字符编码.)

  • \a= \x07=警报(铃)
  • \b= \x08=退格
  • \t= \x09=水平标签
  • \n= \x0A=换行符(或换行符)
  • \v= \x0B=垂直制表符
  • \f= \x0C=换页
  • \r= \x0D=回车
  • \e= \x1B=转义(非标准GCC扩展)

标点字符:

  • \"=引号(不需要反斜杠'"')
  • \'=撇号(不需要反斜杠"'")
  • \? =问号(用于避免三角形)
  • \\ =反斜杠

数字字符引用:

  • \ +最多3个八进制数字
  • \x +任意数量的十六进制数字
  • \u + 4个十六进制数字(Unicode BMP,C++ 11中的新增功能)
  • \U + 8个十六进制数字(Unicode星体平面,C++ 11中的新增功能)

\0= \00= \000=八进制ecape为空字符

如果你想在a之后想要一个实际的数字字符\0,那么是的,我推荐字符串连接.请注意,文字部分之间的空格是可选的,因此您可以编写"\0""0".

  • 在`\ x`的情况下,十六进制数字将被"贪婪地"读取,直到第一个非十六进制数字(即,不像您期望的那样限制为2,并且正如某些语法高亮显示*做*假设).您可以使用@ dan04分割字符串的技巧来标记十六进制的结尾:`"\ x0020""FeedDadBeer"`而不是`"\ x0020FeedDadBeer"`. (17认同)
  • @StijnSanders:它不是C或C++标准,但有些编译器使用`\ e`来表示转义字符`\ x1B`.我已将它添加到我的列表中. (3认同)