文字列ライブラリ
目次 |
[編集] 文字
C++標準ライブラリにおいて、文字とは、連続して扱うことでテキストを表現できるオブジェクトのことです。
この用語は、文字型のオブジェクトだけでなく、文字列ライブラリおよび以下のライブラリで指定された定義を提供する型によって表現できるあらゆる値を意味します。
| (C++11以降) |
文字列ライブラリおよび正規表現ライブラリ(C++11から)では、文字は文字様型 (char-like types) のみ、すなわちPODType(C++20まで)TrivialTypeかつStandardLayoutType(C++20から)(C++26まで)TriviallyCopyableかつStandardLayoutType(C++26から)の要件を満たす非配列型でなければなりません。
|
任意の文字様型 |
(C++26以降) |
そのため、文字は文字列ライブラリおよび正規表現ライブラリ(C++11から)では文字様オブジェクト (char-like objects) とも呼ばれます。
一部の標準ライブラリコンポーネントは、文字コンテナ型 (character container types) を受け入れます。これらもまた、個々の文字を表現するために使用される型です。このような型は、std::char_traits および std::char_traits を使用するクラステンプレートのテンプレート引数の一つとして使用されます。
[編集] ライブラリのコンポーネント
C++の文字列ライブラリには、以下のコンポーネントが含まれます。
[編集] 文字特性
多くの文字関連クラステンプレート(std::basic_stringなど)は、そのセマンティクスの定義を完全にするために、関連する型と関数のセットを必要とします。これらの型と関数は、そのような各テンプレートが使用するテンプレートパラメータTraitsにおいて、メンバのtypedef名と関数のセットとして提供されます。それらのセマンティクスを完全にできるクラスがCharTraitsです。
文字列ライブラリは、std::basic_stringおよびstd::basic_string_view(C++17から)のための型と関数を定義するクラステンプレートstd::char_traitsを提供します。
以下の特殊化が定義されており、これらはすべてCharTraits要件を満たします。
| ヘッダ <string> で定義 |
||
| template<> class char_traits<char>; |
||
| template<> class char_traits<wchar_t>; |
||
| template<> class char_traits<char8_t>; |
(C++20以降) | |
| template<> class char_traits<char16_t>; |
(C++11以降) | |
| template<> class char_traits<char32_t>; |
(C++11以降) | |
std::basic_stringおよびstd::basic_string_view(C++17から)にユーザー定義の文字コンテナ型を使用する場合、対応する文字特性クラス(std::char_traitsの特殊化でも可)も提供する必要があります。
[編集] 文字列クラス (std::string など)
クラステンプレート std::basic_string は、文字シーケンスの操作と格納方法を一般化します。文字列の作成、操作、破棄はすべて、便利なクラスメソッドと関連関数のセットによって処理されます。
一般的に使用される型に対して、std::basic_string のいくつかの特殊化が提供されています。
| ヘッダ
<string> で定義 | |
| 型 | 定義 |
std::string
|
std::basic_string<char> |
std::wstring
|
std::basic_string<wchar_t> |
std::u8string (C++20から) |
std::basic_string<char8_t> |
std::u16string (C++11から) |
std::basic_string<char16_t> |
std::u32string (C++11から) |
std::basic_string<char32_t> |
[編集] 文字列ビュークラス (std::string_view など) (C++17から)
クラステンプレート std::basic_string_view は、std::basic_string のインターフェースに似たインターフェースを使用して、文字列または文字列の一部への読み取り専用アクセスを提供する軽量なオブジェクトを提供します。
一般的に使用される型に対して、std::basic_string_view のいくつかの特殊化が提供されています。
| ヘッダ
<string_view> で定義 | |
| 型 | 定義 |
std::string_view
|
std::basic_string_view<char> |
std::wstring_view
|
std::basic_string_view<wchar_t> |
std::u8string_view (C++20から) |
std::basic_string_view<char8_t> |
std::u16string_view
|
std::basic_string_view<char16_t> |
std::u32string_view
|
std::basic_string_view<char32_t> |
[編集] 関連ライブラリ
テキスト処理ライブラリは、ローカライゼーション、文字列変換(例:std::toupper)、文字分類関数(例:std::isspace)、およびテキストエンコーディング認識(std::text_encoding)のサポートを提供します。
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 1170 | C++98 | 文字様型が配列型になり得た | 禁止された |
[編集] 関連項目
| C のドキュメント 文字列ライブラリ
|