std:: locale
|
Definiert in Header
<locale>
|
||
|
class
locale
;
|
||
Ein Objekt der Klasse
std::locale
ist eine unveränderliche indizierte Menge unveränderlicher Facetten. Jedes Stream-Objekt der C++-Eingabe-/Ausgabebibliothek ist mit einem
std::locale
-Objekt assoziiert und verwendet seine Facetten zum Parsen und Formatieren aller Daten.
Zusätzlich ist ein Locale-Objekt mit jedem
std::basic_regex
-Objekt assoziiert.
(seit C++11)
Locale-Objekte können auch als Prädikate verwendet werden, die Zeichenkettenkollation mit Standardcontainern und Algorithmen durchführen, und können direkt abgerufen werden, um die enthaltenen Facetten zu erhalten oder zu modifizieren.
Jedes in einem C++-Programm erstellte Locale enthält mindestens die folgenden Standard-Facets (d.h. std::has_facet gibt true für alle diese Facet-Typen zurück), aber ein Programm kann zusätzliche Spezialisierungen oder komplett neue Facets definieren und diese zu jedem bestehenden Locale-Objekt hinzufügen.
| Unterstützte Facetten | |
|---|---|
|
std::
ctype
<
char
>
std:: ctype < wchar_t > |
std::
codecvt
<
char
,
char
,
std::
mbstate_t
>
std:: codecvt < wchar_t , char , std:: mbstate_t > |
|
std::
num_get
<
char
>
std:: num_get < wchar_t > |
std::
numpunct
<
char
>
std:: numpunct < wchar_t > |
|
std::
num_put
<
char
>
std:: num_put < wchar_t > |
|
|
std::
money_get
<
char
>
std:: money_get < wchar_t > |
std::
moneypunct
<
char
>
std:: moneypunct < char , true > std:: moneypunct < wchar_t > std:: moneypunct < wchar_t , true > |
|
std::
money_put
<
char
>
std:: money_put < wchar_t > |
|
|
std::
time_get
<
char
>
std:: time_get < wchar_t > |
std::
collate
<
char
>
std:: collate < wchar_t > |
|
std::
time_put
<
char
>
std:: time_put < wchar_t > |
std::
messages
<
char
>
std:: messages < wchar_t > |
| Veraltete Facetten | |
|
std::
codecvt
<
char16_t
,
char
,
std::
mbstate_t
>
(seit C++11)
(veraltet in C++20)
std:: codecvt < char32_t , char , std:: mbstate_t > (seit C++11) (veraltet in C++20) std:: codecvt < char16_t , char8_t, std:: mbstate_t > (seit C++20) (veraltet) std:: codecvt < char32_t , char8_t, std:: mbstate_t > (seit C++20) (veraltet) |
|
Internally wird ein Locale-Objekt implementiert, als ob es ein referenzgezählter Zeiger auf ein Array (indiziert durch std::locale::id ) von referenzgezählten Zeigern auf Facetten wäre: Das Kopieren eines Locales kopiert nur einen Zeiger und erhöht mehrere Referenzzähler. Um die Standard-C++-Bibliothek-Threadsicherheitsgarantien aufrechtzuerhalten (Operationen auf verschiedenen Objekten sind immer threadsicher), werden sowohl der Locale-Referenzzähler als auch jeder Facetten-Referenzzähler auf threadsichere Weise aktualisiert, ähnlich wie std::shared_ptr .
Inhaltsverzeichnis |
Mitgliedertypen
| Typ | Beschreibung |
|
Der Facetten-Index-Typ: Jede Facettenklasse muss einen öffentlichen statischen Member dieses Typs deklarieren oder erben
(Klasse) |
|
|
Die Basisklasse für alle Facettenkategorien: Jede Facette jeder Kategorie ist von diesem Typ abgeleitet
(Klasse) |
|
|
category
|
int
(Typdefinition) |
Member-Konstanten
| Name | Erklärung |
|
const
category
none
[static]
|
ein Nullwert, der keine Facettenkategorie anzeigt
(öffentliche statische Member-Konstante) |
|
const
category
collate
[static]
|
ein Bitmaskenwert, der die Collate-Facettenkategorie anzeigt
(öffentliche statische Member-Konstante) |
|
const
category
ctype
[static]
|
ein Bitmaskenwert, der die Ctype-Facettenkategorie anzeigt
(öffentliche statische Member-Konstante) |
|
const
category
monetary
[static]
|
ein Bitmaskenwert, der die Monetary-Facettenkategorie anzeigt
(öffentliche statische Member-Konstante) |
|
const
category
numeric
[static]
|
ein Bitmaskenwert, der die Numeric-Facettenkategorie anzeigt
(öffentliche statische Member-Konstante) |
|
const
category
time
[static]
|
ein Bitmaskenwert, der die Time-Facettenkategorie anzeigt
(öffentliche statische Member-Konstante) |
|
const
category
messages
[static]
|
ein Bitmaskenwert, der die Messages-Facettenkategorie anzeigt
(öffentliche statische Member-Konstante) |
|
const
category
all
[static]
|
collate
|
ctype
|
monetary
|
numeric
|
time
|
messages
(öffentliche statische Member-Konstante) |
std::locale
Member-Funktionen, die ein
category
Argument erwarten, benötigen einen der oben definierten Kategoriewerte oder die Vereinigung zweier oder mehrerer solcher Werte. Die
LC
Konstanten
werden nicht akzeptiert.
Memberfunktionen
|
Konstruiert ein neues Locale
(öffentliche Elementfunktion) |
|
|
Zerstört das Locale und die Facets, deren Referenzzähler null wird
(öffentliche Elementfunktion) |
|
|
Ersetzt ein Locale
(öffentliche Elementfunktion) |
|
|
Konstruiert ein Locale mit compile-time identifiziertem Facet aus einem anderen Locale
(öffentliche Elementfunktion) |
|
|
Gibt den Namen des Locale zurück oder
"*"
wenn unbenannt
(öffentliche Elementfunktion) |
|
|
(C++26)
|
Gibt das mit dem Locale assoziierte Zeichenkodierungsschema zurück
(öffentliche Elementfunktion) |
|
(entfernt in C++20)
|
Gleichheitsvergleich zwischen Locale-Objekten
(öffentliche Elementfunktion) |
|
Vergleicht zwei Zeichenketten lexikografisch unter Verwendung des Collate-Facets dieses Locale
(öffentliche Elementfunktion) |
|
|
[static]
|
Ändert das globale Locale
(öffentliche statische Elementfunktion) |
|
[static]
|
Ruft eine Referenz auf das "C"-Locale ab
(öffentliche statische Elementfunktion) |
Beispiel
Demonstriert den typischen Prolog eines localesensitiven Programms (plattformübergreifend).
#include <iostream> #include <locale> int main() { std::wcout << L"User-preferred locale setting is " << std::locale("").name().c_str() << L'\n'; // on startup, the global locale is the "C" locale std::wcout << 1000.01 << L'\n'; // replace the C++ global locale and the "C" locale with the user-preferred locale std::locale::global(std::locale("")); // use the new global locale for future wide character output std::wcout.imbue(std::locale()); // output the same number again std::wcout << 1000.01 << L'\n'; }
Mögliche Ausgabe:
User-preferred locale setting is en_US.UTF8 1000.01 1,000.01
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 340 | C++98 | Die Menge der Standard-Facets, die alle Locales enthalten müssen, war unklar | Klarstellung vorgenommen |
| LWG 347 | C++98 |
Parameter vom Typ
category
konnten
LC
Konstanten akzeptieren
|
Nicht mehr akzeptiert |
Siehe auch
|
(C++26)
|
beschreibt eine Schnittstelle für den Zugriff auf das
IANA Character Sets Registry
(Klasse) |
|
erhält einen Facet aus einem Locale
(Funktionstemplate) |
|
|
prüft, ob ein Locale einen bestimmten Facet implementiert
(Funktionstemplate) |
|
|
setzt das Locale
(öffentliche Elementfunktion von
std::ios_base
)
|
|
|
gibt das aktuelle Locale zurück
(öffentliche Elementfunktion von
std::ios_base
)
|