std::text_encoding::literal

出自cppreference.com
< cpp‎ | text‎ | text encoding
static consteval text_encoding literal() noexcept;
(C++26 起)

構造一個新的 text_encoding 對象,表示普通字元字面量編碼。它用於確定普通字元或字元串字面量(如 "This is literal")所應用的字元編碼。

除非 CHAR_BIT8,否則這個函數被刪除。

目錄

[編輯] 參數

(無)

[編輯] 返回值

保有普通字面量編碼的表示的對象。

[編輯] 註解

這個函數可以利用特定於編譯器的內建宏(如 Clang 的 __clang_literal_encoding__ 或 GCC 的 __GNUC_EXECUTION_CHARSET_NAME)構造 text_encoding 來予以實現。這些宏是編譯時已知的,它們展開為包含所使用的窄執行字符集(普通字面量編碼)的名字的窄字元串字面量。

literal() 返回的值可能取決於編譯器選項,如 GCC 或 Clang 的 -fexec-charset=encoding-name 或者 MSVC 的 /execution-charset:encoding-name

[編輯] 示例

此示例演示對普通字面量編碼應為 UTF-8 的斷言。

#include <text_encoding>
 
static_assert(std::text_encoding::literal() == std::text_encoding::UTF8);
 
int main()
{
    // 若字面量编码为 UTF-8,则这个无前缀字符串字面量按 UTF-8 编码
    constexpr char green_heart[] = "\N{GREEN HEART}";
 
    // 这个有前缀字符串字面量,无论字面量编码为何,总是按 UTF-8 编码
    constexpr char8_t green_heart_u8[] = u8"\N{GREEN HEART}";
}