C++ 特殊字符标记
1. L 宽字符
关键字 L,则是不管编码环境是什么,都是将其后面的字符串以 Unicode 方式保存,相当于宽字符。
wchar_t s[] = L"123abc";
宽字符串不能直接输出,可以使用 std::wcout 进行输出。在 Windows 建议使用宽字符操作路径等信息,避免乱码。
2. R"()" 转义
R"( ... )" 会完全保留其中的内容,不进行转义。
std::string json = R"(
{
"error": {
"code": 101,
"message": "operation failed!"
},
"result": false
}
)";
原始字符串的定义形式为:R"xxx(raw_string_text)xxx",其中括号的前后可以加任意其它相同的字符,所加的字符串会被编译器忽略。
3. #define 标记 # / ##
一个 # 代表字符串化,将所标记的内容转换为字面字符串,例如
#define S(x) #x
下面的代码输出 "你好":
#include <iostream>
#define S(x) #x
int main() {
std::cout << S(你好) << std::endl;
return 0;
}
两个 ## 代表连接,例如
#define S(x) ab##x
下面的代码可以输出 1:
#include <iostream>
#define S(x) ab##x
int main() {
int abc = 1;
std::cout << S(c) << std::endl;
return 0;
}
一个综合示例:
#include <iostream>
#define S(x) L##x
#define OUTPUT(x) std::wcout << #x << ": " << (x) << std::endl;
int main() {
wchar_t s[] = S("123abc");
OUTPUT(s)
return 0;
}
输出:
s: 123abc