25 Localization library [localization]

25.4 Standard locale categories [locale.categories]

25.4.1 The ctype category [category.ctype]

25.4.1.1 Class template ctype [locale.ctype]

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

      explicit ctype(size_t refs = 0);

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

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

      static locale::id id;

    protected:
      ~ctype();
      virtual bool         do_is(mask m, charT c) const;
      virtual const charT* do_is(const charT* low, const charT* high, mask* vec) const;
      virtual const charT* do_scan_is(mask m, const charT* low, const charT* high) const;
      virtual const charT* do_scan_not(mask m, const charT* low, const charT* high) const;
      virtual charT        do_toupper(charT) const;
      virtual const charT* do_toupper(charT* low, const charT* high) const;
      virtual charT        do_tolower(charT) const;
      virtual const charT* do_tolower(charT* low, const charT* high) const;
      virtual charT        do_widen(char) const;
      virtual const char*  do_widen(const char* low, const char* high, charT* dest) const;
      virtual char         do_narrow(charT, char dfault) const;
      virtual const charT* do_narrow(const charT* low, const charT* high,
                                     char dfault, char* dest) const;
    };
}

Класс ctype инкапсулирует библиотеки C <cctype> функции. istream члены должны использоваться ctype<> для классификации символов во время синтаксического анализа входных данных.

Специализации, требуемые в Table69 ([locale.category]), а именно ctype<char> и ctype<wchar_­t>, реализуют классификацию символов, соответствующую собственному набору символов реализации.

25.4.1.1.1 ctype members [locale.ctype.members]

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

Returns: do_­is(m, c) или do_­is(low, high, vec).

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

Returns: do_­scan_­is(m, low, high).

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

Returns: do_­scan_­not(m, low, high).

charT toupper(charT) const; const charT* toupper(charT* low, const charT* high) const;

Returns: do_­toupper(c) или do_­toupper(low, high).

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

Returns: do_­tolower(c) или do_­tolower(low, high).

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

Returns: do_­widen(c) или do_­widen(low, high, to).

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

Returns: do_­narrow(c, dfault) или do_­narrow(low, high, dfault, to).

25.4.1.1.2 ctype virtual functions [locale.ctype.virtuals]

bool do_is(mask m, charT c) const; const charT* do_is(const charT* low, const charT* high, mask* vec) const;

Effects: Классифицирует символ или последовательность символов. Для каждого символа аргумента определяет значение M типа ctype_­base​::​mask. Вторая форма определяет значениеM типа ctype_­base​::​mask для каждого *p where (low <= p && p < high)и помещает его в vec[p - low].

Returns: Первая форма возвращает результат выражения (M & m) != 0; то есть, true если персонаж имеет указанные характеристики. Вторая форма возвращаетсяhigh.

const charT* do_scan_is(mask m, const charT* low, const charT* high) const;

Effects: Находит в буфере символ, соответствующий классификации m.

Returns: Наименьший указательp в диапазоне [low, high) , который is(m, *p) будет возвращать true; в противном случае возвращаетсяhigh.

const charT* do_scan_not(mask m, const charT* low, const charT* high) const;

Effects: Находит в буфере символ, не соответствующий классификации m.

Returns: Наименьший указательp, если таковой имеется, в диапазоне [low, high) , который is(m, *p) может возвращать false; в противном случае возвращаетсяhigh.

charT do_toupper(charT c) const; const charT* do_toupper(charT* low, const charT* high) const;

Effects: Преобразует символ или символы в верхний регистр. Вторая форма заменяет каждый символ *p в диапазоне, [low, high) для которого существует соответствующий символ верхнего регистра, этим символом.

Returns: Первая форма возвращает соответствующий символ верхнего регистра, если известно, что он существует, или его аргумент, если нет. Вторая форма возвращаетсяhigh.

charT do_tolower(charT c) const; const charT* do_tolower(charT* low, const charT* high) const;

Effects: Преобразует символ или символы в нижний регистр. Вторая форма заменяет каждый символ *p в диапазоне, [low, high) для которого существует соответствующий символ нижнего регистра, на этот символ.

Returns: Первая форма возвращает соответствующий символ нижнего регистра, если известно, что он существует, или его аргумент, если нет. Вторая форма возвращаетсяhigh.

charT do_widen(char c) const; const char* do_widen(const char* low, const char* high, charT* dest) const;

Effects: Применяет простейшее разумное преобразование char значения или последовательности char значений в соответствующее charT значение или значения.233 Единственные символы, для которых требуются уникальные преобразования, - это символы вbasic source character set.

Для любого имени ctype категории с ctype <charT> фаскойctc и действительным ctype_­base​::​mask значениемM, (ctc.​is(M, c) || !is(M, do_­widen(c)) ) является true.234

Вторая форма преобразует каждый символ *p в диапазоне [low, high), помещая результат в dest[p - low].

Returns: Первая форма возвращает преобразованное значение. Вторая форма возвращаетсяhigh.

char do_narrow(charT c, char dfault) const; const charT* do_narrow(const charT* low, const charT* high, char dfault, char* dest) const;

Effects: Применяет простейшее разумное преобразование charT значения или последовательности charT значений в соответствующее char значение или значения.

Для любого символаc в basic source character set преобразовании таково, что

do_widen(do_narrow(c, 0)) == c

Для любого имени ctype категории с ctype<char> фаскойctc однако, и ctype_­base​::​mask значениемM,

(is(M, c) || !ctc.is(M, do_narrow(c, dfault)) )

есть true (если не do_­narrow возвращается dfault). Кроме того, для любого цифрового символаcвыражение (do_­narrow(c, dfault) - '0') оценивается как цифровое значение символа. Вторая форма преобразует каждый символ *p в диапазоне [low, high), помещая результат (или,dfault если простое преобразование недоступно) в dest[p - low].

Returns: Первая форма возвращает преобразованное значение; илиdfault если нет доступного отображения. Вторая форма возвращаетсяhigh.

Аргумент char do_­widen предназначен для приема значений, полученных из символьных литералов, для преобразования в кодировку языкового стандарта.

Другими словами, преобразованный символ не является членом какой-либо классификации символов, котораяc также не является членом.