C++ 特殊字符标记

459 阅读1分钟

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