| Localization library | |||||||||||||||||||||||||
| Regular expressions library(C++11) | |||||||||||||||||||||||||
| Formatting library(C++20) | |||||||||||||||||||||||||
| Null-terminated sequence utilities | |||||||||||||||||||||||||
| Byte strings | |||||||||||||||||||||||||
| Multibyte strings | |||||||||||||||||||||||||
| Wide strings | |||||||||||||||||||||||||
| Primitive numeric conversions | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
| Text encoding identifications | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member types | ||||
| Member functions | ||||
locale::locale | ||||
(C++26) | ||||
(until C++20) | ||||
| Static member functions | ||||
| (1) | ||
locale()throw(); | (until C++11) | |
locale()noexcept; | (since C++11) | |
| (2) | ||
locale(const locale& other)throw(); | (until C++11) | |
locale(const locale& other)noexcept; | (since C++11) | |
explicit locale(constchar* std_name); | (3) | |
explicit locale(conststd::string& std_name); | (4) | (since C++11) |
locale(const locale& other,constchar* std_name, category cats); | (5) | |
locale(const locale& other,conststd::string& std_name, category cats); | (6) | (since C++11) |
template<class Facet> locale(const locale& other, Facet* f); | (7) | |
locale(const locale& other,const locale& one, category cats); | (8) | |
Constructs a new locale object.
Facet (typically deduced from the type of the argument) which is installed fromf. Iff is a null pointer, the constructed locale is a full copy ofother. The program is ill-formed ifFacet is not afacet or it is a volatile-qualified facet.locale::none, the constructed locale has a name if and only ifother has a name. Otherwise, the constructed locale has a name if and only ifother andone both have names.Contents |
| other | - | another locale to copy |
| std_name | - | name of the system locale to use |
| f | - | pointer to a facet to merge withother |
| cats | - | the facet categories used to identify the facets to merge withother |
| one | - | another locale to take facets from |
Overload(7) is typically called with its second argument,f, obtained directly from a new-expression: the locale is responsible for calling the matchingdelete from its own destructor.
#include <codecvt>#include <iostream>#include <locale> std::ostream& operator<<(std::ostream& os,conststd::locale& loc){if(loc.name().length()<=80) os<< loc.name();elsefor(constauto c: loc.name()) os<< c<<(c==';'?"\n ":""); return os<<'\n';} int main(){std::locale l1;std::cout<<"Name of a copy of the classic\"C\" locale: "<< l1; std::locale l2("en_US.UTF-8");std::cout<<"Name of unicode locale: "<< l2; std::locale l3(l1, newstd::codecvt_utf8<wchar_t>);std::cout<<"Name of\"C\" locale except for codecvt: "<< l3; std::locale l4(l1, l2, std::locale::ctype);std::cout<<"Name of\"C\" locale except for ctype, which is unicode:\n "<< l4;}
Possible output:
Name of a copy of the classic "C" locale: CName of unicode locale: en_US.UTF-8Name of "C" locale except for codecvt: *Name of "C" locale except for ctype, which is unicode: LC_CTYPE=en_US.UTF-8; LC_NUMERIC=C; LC_TIME=C; LC_COLLATE=C; LC_MONETARY=C; LC_MESSAGES=C; LC_PAPER=C; LC_NAME=C; LC_ADDRESS=C; LC_TELEPHONE=C; LC_MEASUREMENT=C; LC_IDENTIFICATION=C
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 436 | C++98 | for overload(7), it was unclear whether Facet can be cv-qualified | it can be const-qualified, but not volatile-qualified |
| LWG 2295 | C++98 | for overload(7), the constructed locale had no name even iff is null | it has the name ofother |
| destructs the locale and the facets whose reference count becomes zero (public member function)[edit] |
| 1. | List of Windows locale names. |
| 2. | List of Linux locale names. |