std::text_encoding::literal
static consteval text_encoding literal() noexcept; | (начиная с C++26) |
Создаёт новый объект text_encoding, представляющий кодировку обычных символьных литералов. Он используется для определения кодировки символов, применяемой к обычным символьным и строковым литералам (например, "This is literal").
Эта функция удалена, если CHAR_BIT не является 8.
Параметры
(нет)
Возвращаемое значение
Объект, содержащий представление кодировки обычных литералов.
Примечания
Эту функцию можно реализовать, создавая text_encoding с помощью встроенных макросов компилятора, таких как __clang_literal_encoding__ в Clang или __GNUC_EXECUTION_CHARSET_NAME в GCC. Эти макросы, значения которых известны во время компиляции, раскрываются в узкий строковый литерал, содержащий название используемого узкого набора символов выполнения (кодировки обычных литералов).
Значение, возвращаемое literal(), может зависеть от параметров компилятора, таких как -fexec-charset=encoding-name в GCC или Clang либо /execution-charset:encoding-name в MSVC.
Пример
В этом примере демонстрируется утверждение о том, что кодировка обычных литералов должна быть 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}";
}
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/text/text_encoding/literal