std::locale (3) - Linux Manuals

std::locale: std::locale


std::locale - std::locale


Defined in header <locale>
class locale;

An object of class std::locale is an immutable indexed set of immutable facets. Each stream object of the C++ input/output library is associated with an std::locale object and uses its facets for parsing and formatting of all data. In addition, a locale object is associated with each std::basic_regex object. Locale objects can also be used as predicates that perform string collation with the standard containers and algorithms and can be accessed directly to obtain or modify the facets they hold.
Each locale constructed in a C++ program holds at least the following standard facets, but a program may define additional specializations or completely new facets and add them to any existing locale object.

Supported facets
std::collate<char> std::collate<wchar_t>
std::ctype<char> std::ctype<wchar_t>
std::codecvt<char,char,mbstate_t> std::codecvt<char32_t,char,mbstate_t>
std::codecvt<char16_t,char,mbstate_t> std::codecvt<wchar_t,char,mbstate_t>
std::moneypunct<char> std::moneypunct<wchar_t>
std::moneypunct<char,true> std::moneypunct<wchar_t,true>
std::money_get<char> std::money_get<wchar_t>
std::money_put<char> std::money_put<wchar_t>
std::numpunct<char> std::numpunct<wchar_t>
std::num_get<char> std::num_get<wchar_t>
std::num_put<char> std::num_put<wchar_t>
std::time_get<char> std::time_get<wchar_t>
std::time_put<char> std::time_put<wchar_t>
std::messages<char> std::messages<wchar_t>

Internally, a locale object is implemented as-if it is a reference-counted pointer to an array (indexed by std::locale::id) of reference-counted pointers to facets: copying a locale only copies one pointer and increments several reference counts. To maintain the standard C++ library thread safety guarantees (operations on different objects are always thread-safe), both the locale reference count and each facet reference count are updated in thread-safe manner, similar to std::shared_ptr.

Member types

         the facet index type: each facet class must declare or inherit a public static member of this type
id (class)
         the base class for all facet categories: each facet of any category is derived from this type
facet (class)
category (typedef)

Member objects

none a zero value of type category indicating no facet category
         (public static member constant)

collate a bitmask value of type category indicating the collate facet category
         (public static member constant)

ctype a bitmask value of type category indicating the ctype facet category
         (public static member constant)

monetary a bitmask value of type category indicating the monetary facet category
         (public static member constant)

numeric a bitmask value of type category indicating the numeric facet category
         (public static member constant)

time a bitmask value of type category indicating the time facet category
         (public static member constant)

messages a bitmask value of type category indicating the messages facet category
         (public static member constant)

all collate | ctype | monetary | numeric | time | messages
         (public static member constant)

Member functions

              constructs a new locale
constructor (public member function)
              destructs the locale and the facets whose reference count becomes zero
destructor (public member function)
              replaces a locale
operator= (public member function)
              constructs a locale with compile-time identified facet copied from another locale
combine (public member function)
              returns the name of the locale or "*" if unnamed
name (public member function)
              equality comparison between locale objects
operator== (public member function)
              lexicographically compares two strings using this locale's collate facet
operator() (public member function)

global changes the global locale
              (public static member function)

classic obtains a reference to the "C" locale
              (public static member function)


Demonstrates the typical prologue of a locale-sensitive program (cross-platform)
// Run this code

  #include <iostream>
  #include <locale>

  int main()
      std::wcout << "User-preferred locale setting is " << std::locale("").name().c_str() << '\n';
      // on startup, the global locale is the "C" locale
      std::wcout << 1000.01 << '\n';
      // replace the C++ global locale as well as the C locale with the user-preferred locale
      // use the new global locale for future wide character output
      // output the same number again
      std::wcout << 1000.01 << '\n';

Possible output:

  User-preferred locale setting is en_US.UTF8

See also

          obtains a facet from a locale
use_facet (function template)
          checks if a locale implements a specific facet
has_facet (function template)
          sets locale
imbue (public member function of std::ios_base)
          returns current locale
getloc (public member function of std::ios_base)