命名空间
变体
操作

std::text_encoding::literal

来自 cppreference.com
 
 
 
 
static consteval text_encoding literal() noexcept;
(自 C++26 起)

构造一个新的 text_encoding 对象,表示 普通字符字面量编码。它用于确定应用于普通字符或字符串字面量(例如 "This is literal")的字符编码。

除非 CHAR_BIT8,否则此函数被删除。

内容

[编辑] 参数

(无)

[编辑] 返回值

包含普通字面量编码表示的对象。

[编辑] 注释

此函数可以通过使用特定于编译器的内置宏来实现,例如来自 Clang 的 __clang_literal_encoding__,或来自 GCC 的 __GNUC_EXECUTION_CHARSET_NAME。这些宏在编译时已知,扩展为包含所使用窄执行字符集(普通字面量编码)名称的窄字符串字面量。

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()
{
    // if the literal encoding is UTF-8, then this unprefixed string literal is
    // encoded as UTF-8
    constexpr char green_heart[] = "\N{GREEN HEART}";
 
    // this prefixed string literal is always encoded as UTF-8 regardless of the
    // literal encoding
    constexpr char8_t green_heart_u8[] = u8"\N{GREEN HEART}";
}