std:: locale
|
Определено в заголовочном файле
<locale>
|
||
|
class
locale
;
|
||
Объект класса
std::locale
представляет собой неизменяемый индексированный набор неизменяемых аспектов. Каждый объект потока библиотеки ввода/вывода C++ связан с объектом
std::locale
и использует его аспекты для синтаксического анализа и форматирования всех данных.
Кроме того, объект локали связан с каждым объектом
std::basic_regex
.
(начиная с C++11)
Объекты локалей также могут использоваться как предикаты, выполняющие сравнение строк с стандартными контейнерами и алгоритмами, и могут быть доступны напрямую для получения или изменения содержащихся в них аспектов.
Каждая локаль, создаваемая в программе на C++, содержит как минимум следующие стандартные фацеты (т.е. std::has_facet возвращает true для всех этих типов фацетов), однако программа может определять дополнительные специализации или совершенно новые фацеты и добавлять их в любой существующий объект локали.
| Поддерживаемые аспекты | |
|---|---|
|
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 > |
| Устаревшие аспекты | |
|
std::
codecvt
<
char16_t
,
char
,
std::
mbstate_t
>
(начиная с C++11)
(устарело в C++20)
std:: codecvt < char32_t , char , std:: mbstate_t > (начиная с C++11) (устарело в C++20) std:: codecvt < char16_t , char8_t, std:: mbstate_t > (начиная с C++20) (устарело) std:: codecvt < char32_t , char8_t, std:: mbstate_t > (начиная с C++20) (устарело) |
|
Внутренне объект локали реализован как если бы он был указателем с подсчётом ссылок на массив (индексируемый с помощью std::locale::id ) указателей с подсчётом ссылок на фасе́ты: копирование локали копирует только один указатель и увеличивает несколько счётчиков ссылок. Для обеспечения гарантий потокобезопасности стандартной библиотеки C++ (операции с разными объектами всегда потокобезопасны), как счётчик ссылок локали, так и каждый счётчик ссылок фасе́та обновляются потокобезопасным способом, аналогично std::shared_ptr .
Содержание |
Типы членов
| Тип | Описание |
|
тип индекса фацета: каждый класс фацета должен объявлять или наследовать публичный статический член этого типа
(класс) |
|
|
базовый класс для всех категорий фацетов: каждый фацет любой категории наследуется от этого типа
(класс) |
|
|
category
|
int
(typedef) |
Константы-члены
| Название | Описание |
|
const
category
none
[static]
|
нулевое значение, указывающее на отсутствие категории фасета
(публичная статическая константа-член) |
|
const
category
collate
[static]
|
битовая маска, указывающая категорию фасета collate
(публичная статическая константа-член) |
|
const
category
ctype
[static]
|
битовая маска, указывающая категорию фасета ctype
(публичная статическая константа-член) |
|
const
category
monetary
[static]
|
битовая маска, указывающая категорию фасета monetary
(публичная статическая константа-член) |
|
const
category
numeric
[static]
|
битовая маска, указывающая категорию фасета numeric
(публичная статическая константа-член) |
|
const
category
time
[static]
|
битовая маска, указывающая категорию фасета time
(публичная статическая константа-член) |
|
const
category
messages
[static]
|
битовая маска, указывающая категорию фасета messages
(публичная статическая константа-член) |
|
const
category
all
[static]
|
collate
|
ctype
|
monetary
|
numeric
|
time
|
messages
(публичная статическая константа-член) |
std::locale
функции-члены, ожидающие аргумент
category
, требуют одно из значений категорий, определенных выше, или объединение двух или более таких значений.
LC
константы
не принимаются.
Функции-члены
|
создает новую локаль
(public member function) |
|
|
уничтожает локаль и фацеты, счетчик ссылок которых становится нулевым
(public member function) |
|
|
заменяет локаль
(public member function) |
|
|
создает локаль с фацетом, идентифицированным во время компиляции, скопированным из другой локали
(public member function) |
|
|
возвращает имя локали или
"*"
если имя отсутствует
(public member function) |
|
|
(C++26)
|
возвращает схему кодировки символов, связанную с локалью
(public member function) |
|
(removed in C++20)
|
сравнение на равенство между объектами локалей
(public member function) |
|
лексикографически сравнивает две строки, используя фацет сравнения этой локали
(public member function) |
|
|
[static]
|
изменяет глобальную локаль
(public static member function) |
|
[static]
|
получает ссылку на локаль "C"
(public static member function) |
Пример
Демонстрирует типичный пролог программы с поддержкой локалей (кроссплатформенный).
#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'; }
Возможный вывод:
User-preferred locale setting is en_US.UTF8 1000.01 1,000.01
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 340 | C++98 | набор стандартных фацетов, которые должны содержать все локали, был неясен | прояснено |
| LWG 347 | C++98 |
параметры типа
category
могли принимать
LC
константы
|
больше не принимаются |
Смотрите также
|
(C++26)
|
описывает интерфейс для доступа к
реестру кодировок символов IANA
(класс) |
|
получает фасет из локали
(шаблон функции) |
|
|
проверяет, реализует ли локаль конкретный фасет
(шаблон функции) |
|
|
устанавливает локаль
(публичная функция-член
std::ios_base
)
|
|
|
возвращает текущую локаль
(публичная функция-член
std::ios_base
)
|