std:: locale
|
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
|
(C++26)
|
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
)
|