Namespaces
Variants

std:: locale

From cppreference.net
Definido en el encabezado <locale>
class locale ;

Un objeto de la clase std::locale es un conjunto indexado inmutable de facetas inmutables. Cada objeto de flujo de la biblioteca de entrada/salida de C++ está asociado con un objeto std::locale y utiliza sus facetas para el análisis y formateo de todos los datos. Además, un objeto locale está asociado con cada objeto std::basic_regex . (desde C++11) Los objetos locale también pueden utilizarse como predicados que realizan ordenación de cadenas con los contenedores y algoritmos estándar, y pueden accederse directamente para obtener o modificar las facetas que contienen.

Cada configuración regional construida en un programa C++ contiene al menos las siguientes facetas estándar (es decir, std::has_facet devuelve true para todos estos tipos de faceta), pero un programa puede definir especializaciones adicionales o facetas completamente nuevas y agregarlas a cualquier objeto de configuración regional existente.

Facetas admitidas
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 >
Facetas en desuso
std:: codecvt < char16_t , char , std:: mbstate_t > (desde C++11) (obsoleto en C++20)
std:: codecvt < char32_t , char , std:: mbstate_t > (desde C++11) (obsoleto en C++20)
std:: codecvt < char16_t , char8_t, std:: mbstate_t > (desde C++20) (obsoleto)
std:: codecvt < char32_t , char8_t, std:: mbstate_t > (desde C++20) (obsoleto)

Internamente, un objeto locale se implementa como si fuera un puntero con conteo de referencias a un arreglo (indexado por std::locale::id ) de punteros con conteo de referencias a facets: copiar un locale solo copia un puntero e incrementa varios contadores de referencia. Para mantener las garantías de seguridad de hilos de la biblioteca estándar de C++ (las operaciones sobre diferentes objetos son siempre seguras para hilos), tanto el conteo de referencias del locale como cada conteo de referencias de facet se actualizan de manera segura para hilos, similar a std::shared_ptr .

Contenidos

Tipos de miembros

Tipo Descripción
el tipo de índice de faceta: cada clase de faceta debe declarar o heredar un miembro estático público de este tipo
(clase)
la clase base para todas las categorías de faceta: cada faceta de cualquier categoría deriva de este tipo
(clase)
category
int
(typedef)

Constantes de miembro

Nombre Explicación
const category none
[static]
un valor cero que indica ninguna categoría de faceta
(constante de miembro estático público)
const category collate
[static]
un valor de máscara de bits que indica la categoría de faceta collate
(constante de miembro estático público)
const category ctype
[static]
un valor de máscara de bits que indica la categoría de faceta ctype
(constante de miembro estático público)
const category monetary
[static]
un valor de máscara de bits que indica la categoría de faceta monetary
(constante de miembro estático público)
const category numeric
[static]
un valor de máscara de bits que indica la categoría de faceta numeric
(constante de miembro estático público)
const category time
[static]
un valor de máscara de bits que indica la categoría de faceta time
(constante de miembro estático público)
const category messages
[static]
un valor de máscara de bits que indica la categoría de faceta messages
(constante de miembro estático público)
const category all
[static]
collate | ctype | monetary | numeric | time | messages
(constante de miembro estático público)

std::locale las funciones miembro que esperan un argumento de category requieren uno de los valores de categoría definidos anteriormente, o la unión de dos o más de dichos valores. Las LC constantes no son aceptadas.

Funciones miembro

construye una nueva configuración regional
(función miembro pública)
destruye la configuración regional y las facetas cuyo contador de referencias llega a cero
(función miembro pública)
reemplaza una configuración regional
(función miembro pública)
construye una configuración regional con faceta identificada en tiempo de compilación copiada de otra configuración regional
(función miembro pública)
devuelve el nombre de la configuración regional o "*" si no tiene nombre
(función miembro pública)
(C++26)
devuelve el esquema de codificación de caracteres asociado con la configuración regional
(función miembro pública)
(eliminado en C++20)
comparación de igualdad entre objetos de configuración regional
(función miembro pública)
compara lexicográficamente dos cadenas usando la faceta collate de esta configuración regional
(función miembro pública)
[static]
cambia la configuración regional global
(función miembro estática pública)
[static]
obtiene una referencia a la configuración regional "C"
(función miembro estática pública)

Ejemplo

Demuestra el prólogo típico de un programa sensible a la configuración regional (multiplataforma).

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

Salida posible:

User-preferred locale setting is en_US.UTF8
1000.01
1,000.01

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 340 C++98 el conjunto de facetas estándar que todas las localizaciones deben contener no estaba claro aclarado
LWG 347 C++98 los parámetros de tipo category podían aceptar LC constants ya no se aceptan

Véase también

describe una interfaz para acceder al Registro de Conjuntos de Caracteres de IANA
(clase)
obtiene una faceta de una configuración regional
(plantilla de función)
verifica si una configuración regional implementa una faceta específica
(plantilla de función)
establece la configuración regional
(función miembro pública de std::ios_base )
devuelve la configuración regional actual
(función miembro pública de std::ios_base )