"ワーキングドラフトC++、2012年11月2日"
21.1一般的な[strings.general]から
1この節では、任意の非アレイPOD(3.9)タイプのシーケンスを操作するためのコンポーネントについて説明します。
21.4.1のbasic_string一般的な要件は、[string.require]のbasic_stringオブジェクト内
5チャー状オブジェクトが連続して格納されなければなりません。つまり、任意のbasic_stringオブジェクト オブジェクトの場合、ID & *(s.begin()+ n)== & * s.begin()+ nは、0のすべての値に対して保持されます。 < = n < 。サイズ()。
しかし
6参照、ポインタ、反復子それのbasic_stringオブジェクトの以下の使用によって無効にすることができるのbasic_string配列の要素を参照:
- 任意の標準ライブラリへの引数としてconst [operator]、at、front、back、begin、rbegin、end、およびrendを除く非constメンバ関数を呼び出します。
だから、あなたはあなたがどこか他の生の配列を使用しながら、これらの関数を呼び出すことではない、限り、あなたは注意を払うように安全でなければなりません。
更新:
文字の特徴及び要件は21.2文字の特徴[char.traits]と21.2.1文字の特徴要件[char.traits.require]に記載されています。さらに、typedefとspecializationは21.2.2の特性typedef [char.traits.typedefs]と21.2.3 char_traits specializations [char.traits.specializations]にそれぞれ記述されています。
これらの形質は、入出力ライブラリでも使用されます。したがって、eof()
またはpos_type
とoff_type
のような要件がありますが、これはbasic_string
のコンテキストでは意味がありません。
私はchar
、char16_t
、char32_t
とwchar_t
ための4つの専門分野以外にも、実際にimplementatinによって定義されるべきこれらの特性のためにどのような要件が表示されません。それはあなたの例ではgcc 4.7で箱から出して働いていた、が
は、私が提供するデフォルトの実装を(GCC 4.7)取っただけ
struct bool_traits {
typedef bool char_type;
static void assign(char_type &r, char_type d);
static char_type *copy(char_type *s, const char_type *p, std::size_t n);
static char_type *move(char_type *s, const char_type *p, std::size_t n);
};
を最小限bool_traits
を定義し、使用されたもの
のような
std::basic_string<bool, bool_traits> ab;
ご使用の環境によっては、すでに実装されている可能性があります。そうでない場合は、簡単にbool_traits
またはテンプレートの特殊化std::char_traits<bool>
を実装することができます。
Working Draft, PDFまたはcppreference.com - std::char_traitsに文字特性の完全なインターフェイスが表示されます。
古いコードでは、パックされたビットまたは各ブールが個別にアドレス可能な場所にありますか? – us2012
それぞれのブールは、古典的なbool myarray [n]と同じように別々です。 –
ベクトルはどうですか? –
jrok