# std::literals::string_literals::operator""s

< cpp‎ | string‎ | basic string

定义于头文件 `<string>` |  |
| (1) |
std::string operator""s(const char *str, std::size_t len); |  | (C++14 起) (C++20 前)
constexpr std::string operator""s(const char *str, std::size_t len); |  | (C++20 起)
constexpr std::u8string operator""s(const char8_t *str, std::size_t len); | (2) | (C++20 起)
| (3) |
std::u16string operator""s(const char16_t *str, std::size_t len); |  | (C++14 起) (C++20 前)
constexpr std::u16string operator""s(const char16_t *str, std::size_t len); |  | (C++20 起)
| (4) |
std::u32string operator""s(const char32_t *str, std::size_t len); |  | (C++14 起) (C++20 前)
constexpr std::u32string operator""s(const char32_t *str, std::size_t len); |  | (C++20 起)
| (5) |
std::wstring operator""s(const wchar_t *str, std::size_t len); |  | (C++14 起) (C++20 前)
constexpr std::wstring operator""s(const wchar_t *str, std::size_t len); |  | (C++20 起)

创建所需类型的 string 字面量。

1) 返回 std::string{str, len}
2) 返回 std::u8string{str, len}
3) 返回 std::u16string{str, len}
4) 返回 std::u32string{str, len}
5) 返回 std::wstring{str, len}

### 参数

str | - | 指向无修饰字符数组字面量起始的指针
len | - | 无修饰字符数组字面量的长度

### 返回值

string 字面量。

### 注解

这些运算符定义于命名空间 `std::literals::string_literals` ，其中 `literals` 和 `string_literals` 都是内联命名空间。可通过 using namespace std::literals 、 using namespace std::string_literals 及 using namespace std::literals::string_literals 获取对这些运算符的访问。

std::chrono::duration 亦定义 `operator""s` ，以表示字面量的秒，但它是算术类型字面量： 10.0s 与 10s 是十秒，但 "10"s 是字符串。

### 示例

    #include <string>
    #include <iostream>

    int main()
    {
        using namespace std::string_literals;

        std::string s1 = "abc\0\0def";
        std::string s2 = "abc\0\0def"s;
        std::cout << "s1: " << s1.size() << " \"" << s1 << "\"\n";
        std::cout << "s2: " << s2.size() << " \"" << s2 << "\"\n";
    }

可能的输出：

    s1: 3 "abc"
    s2: 8 "abcdef"

### 参阅

(构造函数) | 构造 `basic_string` (公开成员函数)
operator""sv (C++17) | 创建一个字符数组字面量的字符串视图 (函数)