25 Localization library [localization]

25.4 Standard locale categories [locale.categories]

25.4.1 The ctype category [category.ctype]

25.4.1.3 ctype specializations [facet.ctype.special]

namespace std {
  template <>
    class ctype<char> : public locale::facet, public ctype_base {
    public:
      using char_type = char;

      explicit ctype(const mask* tab = 0, bool del = false,
                     size_t refs = 0);

      bool is(mask m, char c) const;
      const char* is(const char* low, const char* high, mask* vec) const;
      const char* scan_is (mask m,
                           const char* low, const char* high) const;
      const char* scan_not(mask m,
                           const char* low, const char* high) const;

      char        toupper(char c) const;
      const char* toupper(char* low, const char* high) const;
      char        tolower(char c) const;
      const char* tolower(char* low, const char* high) const;

      char  widen(char c) const;
      const char* widen(const char* low, const char* high, char* to) const;
      char  narrow(char c, char dfault) const;
      const char* narrow(const char* low, const char* high, char dfault,
                         char* to) const;

      static locale::id id;
      static const size_t table_size = implementation-defined;

      const mask* table() const noexcept;
      static const mask* classic_table() noexcept;

    protected:
      ~ctype();
      virtual char        do_toupper(char c) const;
      virtual const char* do_toupper(char* low, const char* high) const;
      virtual char        do_tolower(char c) const;
      virtual const char* do_tolower(char* low, const char* high) const;

      virtual char        do_widen(char c) const;
      virtual const char* do_widen(const char* low,
                                   const char* high,
                                   char* to) const;
      virtual char        do_narrow(char c, char dfault) const;
      virtual const char* do_narrow(const char* low,
                                    const char* high,
                                    char dfault, char* to) const;
    };
}

Предоставляется специализация, позволяющая реализовать ctype<char> функции-члены по типу . Определяемое реализацией значение member не менее 256.charinline235table_­size

Только char (не unsigned char и signed char) форма предоставляется. Специализация указывается в стандарте и не остается в качестве детали реализации, поскольку она влияет на интерфейс деривации для ctype<char>.

25.4.1.3.1 ctype<char> destructor [facet.ctype.char.dtor]

~ctype();

Effects: Если первый аргумент конструктора отличался от нуля, а второй аргумент был равен нулю true, имеет значение delete [] table().

25.4.1.3.2 ctype<char> members [facet.ctype.char.members]

В следующих описаниях членов для unsigned char значений, v где предполагается, что они имеют значение v >= table_­size, table()[v] зависящее от реализации (возможно, различное для каждого такого значения v), без выполнения поиска в массиве.

explicit ctype(const mask* tbl = 0, bool del = false, size_t refs = 0);

Requires: tbl либо 0, либо массив хотя бы из table_­size элементов.

Effects: Передает свой refs аргумент конструктору базового класса.

bool is(mask m, char c) const; const char* is(const char* low, const char* high, mask* vec) const;

Effects: Вторая форма для всех *p в диапазоне [low, high)присваивается vec[p - low] значению table()[(unsigned char)*p].

Returns: Возвращается первая форма table()[(unsigned char)c] & m; вторая форма возвращается high.

const char* scan_is(mask m, const char* low, const char* high) const;

Returns: Наименьшее p в диапазоне [low, high) такое, что

table()[(unsigned char) *p] & m

есть true.

const char* scan_not(mask m, const char* low, const char* high) const;

Returns: Наименьшее p в диапазоне [low, high) такое, что

table()[(unsigned char) *p] & m

есть false.

char toupper(char c) const; const char* toupper(char* low, const char* high) const;

Returns: do_­toupper(c) или do_­toupper(low, high), соответственно.

char tolower(char c) const; const char* tolower(char* low, const char* high) const;

Returns: do_­tolower(c) или do_­tolower(low, high), соответственно.

char widen(char c) const; const char* widen(const char* low, const char* high, char* to) const;

Returns: do_­widen(c) или do_­widen(low, high, to), соответственно.

char narrow(char c, char dfault) const; const char* narrow(const char* low, const char* high, char dfault, char* to) const;

Returns: do_­narrow(c, dfault) или do_­narrow(low, high, dfault, to), соответственно.

const mask* table() const noexcept;

Returns: Первый аргумент конструктора, если он был ненулевым, в противном случае classic_­table().

25.4.1.3.3 ctype<char> static members [facet.ctype.char.statics]

static const mask* classic_table() noexcept;

Returns: Указатель на начальный элемент массива размера, table_­size который представляет классификации символов в "C" локали.

25.4.1.3.4 ctype<char> virtual functions [facet.ctype.char.virtuals]

char        do_toupper(char) const;
const char* do_toupper(char* low, const char* high) const;
char        do_tolower(char) const;
const char* do_tolower(char* low, const char* high) const;

virtual char        do_widen(char c) const;
virtual const char* do_widen(const char* low,
                             const char* high,
                             char* to) const;
virtual char        do_narrow(char c, char dfault) const;
virtual const char* do_narrow(const char* low,
                              const char* high,
                              char dfault, char* to) const;

Эти функции описаны так же, как и члены с тем же именем в ctype class template.