提前解释内容:
u8前缀:utf8存储格式;比如:u8"abc"字符串
u前缀:utf16存储格式;比如:u"abc"字符串
U前缀:utf32存储格式;比如:U"abc"字符串
原生字符串字面量 关键字:R
//举例,比较典型的,符合大众认知的转义符 \n 换行
cout << R"(abc\nabc)";// 输出内容是 abc\nabc
printf(R"(abc\n111)");// 输出内容是abc\n111
//输出结果是
//abc\n
//123
cout<<R"(abc\n
123)";//编写的代码有换行,则输出内容也会换行,但与代码中的 \n 没任何关系
cout<<u8R"(abc\n\n123)";//输出结果 abc\n\n123
很明显,带有关键字R,输出的内容就是括号中间的原数据内容,且所有转义符无效,以原内容输出!
注意:
u8,u,U,u8R,uR,UR描述符,即便有宏定义与这些描述符同名,在使用时,还是会按照描述符来解释:
#define u8 "123456789"
#define R "123456789"
cout << u8"abc" << endl;// 这里输出依然是 abc,而不是 123456789abc !!!!!
cout << R"(abc)" << endl;//同理