std::locale::locale
From cppreference.com
locale() throw();
|
(1) | (until C++11) |
locale() noexcept;
|
(since C++11) | |
locale( const locale& other ) throw();
|
(2) | (until C++11) |
locale( const locale& other ) noexcept;
|
(since C++11) | |
explicit locale( const char* std_name );
|
(3) | |
explicit locale( const std::string& std_name );
|
(4) | (since C++11) |
locale( const locale& other, const char* std_name, category cats );
|
(5) | |
locale( const locale& other, const std::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.
1) Default constructor. Constructs a copy of the global C++ locale, which is the locale most recently used as the argument to std::locale::global or a copy of
std::locale::classic() if no call to std::locale::global has been made.2) Copy constructor. Constructs a copy of
other.3,4) Constructs a copy of the system locale with specified
std_name (such as "C", or "POSIX", or "en_US.UTF-8", or "English_US.1251"), if such locale is supported by the operating system. The locale constructed in this manner has a name.4) Equivalent to
locale(std_name.c_str()).5) Constructs a copy of
other except for all the facets identified by the cats argument, which are copied from the system locale identified by its std_name. The locale constructed in this manner has a name if and only if other has a name.6) Equivalent to
locale(other, std_name.c_str(), cats).7) Constructs a copy of
other except for the facet of type Facet (typically deduced from the type of the argument) which is installed from f. If f is a null pointer, the constructed locale is a full copy of other. The program is ill-formed if Facet is not a facet or it is a volatile-qualified facet. If
f is null, the constructed locale has the same name as other. Otherwise, the constructed locale has no name.8) Constructs a copy of
other except for all the facets identified by the cats argument, which are copied from one. If
cats is equal to locale::none, the constructed locale has a name if and only if other has a name. Otherwise, the constructed locale has a name if and only if other and one both have names.Parameters
| other | - | another locale to copy |
| std_name | - | name of the system locale to use |
| f | - | pointer to a facet to merge with other
|
| cats | - | the facet categories used to identify the facets to merge with other
|
| one | - | another locale to take facets from |
Exceptions
3,5) std::runtime_error if the operating system has no locale named
std_name or if std_name is a null pointer.4,6) std::runtime_error if the operating system has no locale named
std_name.Notes
Overload (7) is typically called with its second argument, f, obtained directly from a new-expression: the locale is responsible for calling the matching delete from its own destructor.
Example
Run this code
#include <codecvt>
#include <iostream>
#include <locale>
std::ostream& operator<< (std::ostream& os, const std::locale& loc)
{
if (loc.name().length() <= 80)
os << loc.name();
else
for (const auto 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, new std::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: C
Name of unicode locale: en_US.UTF-8
Name 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
Defect reports
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 if f is null
|
it has the name of other
|
See also
| destructs the locale and the facets whose reference count becomes zero (public member function) |
External links
| 1. | List of Windows locale names. |
| 2. | List of Linux locale names. |