C/C++黑魔法-字符串字面量

字符串字面量(string literal)是指双引号引住的字符,双引号中可以没有字符,也可以有很多个字符。使用字符串字面量可以快速得到需要的一些编码字符。

1. 字面量列表

语法 示例 解释
“(未转义字符\ 转义字符)” “示例” 窄多字节字符串字面量
L”(未转义字符\ 转义字符)” L”示例” 宽字符串字面量,
为了支持汉语等语言。
u8”(未转义字符\ 转义字符)” u8”示例” UTF-8 编码的字符串字面量。
(C++11起新增)
u”(未转义字符\ 转义字符)” u”示例” UTF-16 编码的字符串字面量。
(C++11起新增)
U”(未转义字符\ 转义字符)” U”示例” UTF-32 编码的字符串字面量。
(C++11起新增)
前缀(可选)R”分隔符(原始字符)分隔符” R”prefix(示例)prefix”
或R”(示例)”
原始字符串字面量。
(C++11起新增)

2. 关于L"..."字面量

  • 类型: const wchar_t[N],其中N是执行范围编码的代码单元中的字符串大小,包括空终止符。

3. 关于R"..."字面量

  • R为原始字符串字面量,用于避免转义任何字符。该字面量分隔符间的任何内容都成为字符串的一部分。
  • 例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <iostream>
    int main(int argc, char *argv[])
    {
    const char *longString = R"(
    This is
    a very
    long
    string.
    )";

    std::cout<<"====="<<std::endl;
    std::cout<<longString<<std::endl;
    std::cout<<"====="<<std::endl;

    return 0;
    }
  • 输出:

    1
    2
    3
    4
    5
    6
    7
    8
    =====

    This is
    a very
    long
    string.

    =====
  • 由于R"(的后面与)"的前面都使用了换行,所以输出两个空换行。

4. 参考内容

1
https://en.cppreference.com/w/cpp/language/string_literal