Namespaces
Variants

std:: locale

From cppreference.net
Определено в заголовочном файле <locale>
class locale ;

Объект класса std::locale представляет собой неизменяемый индексированный набор неизменяемых аспектов. Каждый объект потока библиотеки ввода/вывода C++ связан с объектом std::locale и использует его аспекты для синтаксического анализа и форматирования всех данных. Кроме того, объект локали связан с каждым объектом std::basic_regex . (начиная с C++11) Объекты локалей также могут использоваться как предикаты, выполняющие сравнение строк с стандартными контейнерами и алгоритмами, и могут быть доступны напрямую для получения или изменения содержащихся в них аспектов.

Каждая локаль, создаваемая в программе на C++, содержит как минимум следующие стандартные фацеты (т.е. std::has_facet возвращает true для всех этих типов фацетов), однако программа может определять дополнительные специализации или совершенно новые фацеты и добавлять их в любой существующий объект локали.

**Примечание:** В данном HTML-фрагменте отсутствует текст для перевода на русский язык. Весь представленный контент состоит из: - HTML-тегов и атрибутов (которые не подлежат переводу) - C++ специфических терминов (`std::num_get`, `std::numpunct`, `char`, `wchar_t`), которые не переводятся - Символов форматирования (`<`, `>`, `::`) Все элементы сохранены в оригинальном формате в соответствии с требованиями. **Примечание:** Весь текст в данном HTML-фрагменте находится внутри тегов ` `, которые обозначают код на C++. Согласно вашим инструкциям, код на C++ (включая ключевые слова, идентификаторы и синтаксис) не подлежит переводу. Поэтому весь представленный фрагмент оставлен без изменений. **Примечание:** В данном HTML-фрагменте отсутствует текст для перевода - все содержимое состоит из HTML-тегов, атрибутов и C++ кода внутри тегов ` `, которые согласно инструкциям не подлежат переводу. **Примечание:** В данном фрагменте нет текста для перевода, так как весь контент состоит из: - HTML-тегов и атрибутов (сохранены без изменений) - C++ кода внутри тегов ` ` (термины `std::money_put`, `char`, `wchar_t` не переведены согласно требованиям) - Специальных символов HTML (`<`, `>`) **Примечание:** Весь текст в данном HTML-фрагменте состоит из C++ специфичных терминов (имен классов, ключевых слов языка) и HTML-тегов, которые согласно инструкциям не подлежат переводу. Поэтому перевод не требуется, и исходный код остается без изменений. **Примечание:** В данном HTML-фрагменте отсутствует текст для перевода - все содержимое состоит из HTML-тегов, атрибутов и C++ кода внутри тегов ` `, которые согласно инструкциям не подлежат переводу.
Поддерживаемые аспекты
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 константы больше не принимаются

Смотрите также

описывает интерфейс для доступа к реестру кодировок символов IANA
(класс)
получает фасет из локали
(шаблон функции)
проверяет, реализует ли локаль конкретный фасет
(шаблон функции)
устанавливает локаль
(публичная функция-член std::ios_base )
возвращает текущую локаль
(публичная функция-член std::ios_base )