Namensräume
Varianten
Aktionen

std::text_encoding::literal

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

Konstruiert ein neues text_encoding Objekt, das die Kodierung von gewöhnlichen Zeichenliteralen repräsentiert. Es wird verwendet, um die Zeichenkodierung zu bestimmen, die auf gewöhnliche Zeichen- oder Zeichenkettenliterale angewendet wird (z. B. "Dies ist ein Literal").

Diese Funktion ist gelöscht, es sei denn, CHAR_BIT ist 8.

Inhalt

[bearbeiten] Parameter

(keine)

[bearbeiten] Rückgabewert

Das Objekt, das die Darstellung der gewöhnlichen Literal-Kodierung enthält.

[bearbeiten] Hinweise

Diese Funktion kann durch die Konstruktion von text_encoding mit compilerspezifischen eingebauten Makros wie __clang_literal_encoding__ von Clang oder __GNUC_EXECUTION_CHARSET_NAME von GCC implementiert werden. Diese Makros, die zur Kompilierzeit bekannt sind, expandieren zu einem schmalen Zeichenkettenliteral, das den Namen des verwendeten schmalen Ausführungszeichensatzes (gewöhnliche Literal-Kodierung) enthält.

Der von literal() zurückgegebene Wert kann von Compileroptionen abhängen, wie z. B. -fexec-charset=encoding-name in GCC oder Clang oder /execution-charset:encoding-name in MSVC.

[bearbeiten] Beispiel

Dieses Beispiel demonstriert die Behauptung, dass die gewöhnliche Literal-Kodierung UTF-8 sein sollte.

#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}";
}