bitset(); // (1) C++03
constexpr bitset() noexcept; // (1) C++11
bitset(unsigned long val); // (2) C++03
constexpr bitset(unsigned long long val) noexcept; // (2) C++11
template <class CharT, class Traits, class Allocator>
explicit bitset(
const basic_string<CharT, Traits, Allocator>& str,
typename basic_string<CharT, Traits, Allocator>::size_type pos = 0,
typename basic_string<CharT, Traits, Allocator>::size_type n =
basic_string<CharT, Traits, Allocator>::npos); // (3) C++03
template <class CharT, class Traits, class Allocator>
explicit bitset(
const basic_string<CharT, Traits, Allocator>& str,
typename basic_string<CharT, Traits, Allocator>::size_type pos = 0,
typename basic_string<CharT, Traits, Allocator>::size_type n =
basic_string<CharT, Traits, Allocator>::npos,
CharT zero = CharT('0'),
CharT one = CharT('1')); // (3) C++11
template <class CharT, class Traits, class Allocator>
constexpr explicit bitset(
const basic_string<CharT, Traits, Allocator>& str,
typename basic_string<CharT, Traits, Allocator>::size_type pos = 0,
typename basic_string<CharT, Traits, Allocator>::size_type n =
basic_string<CharT, Traits, Allocator>::npos,
CharT zero = CharT('0'),
CharT one = CharT('1')); // (3) C++23
template <class CharT, class Traits>
constexpr explicit bitset(
basic_string_view<CharT, Traits> str,
typename basic_string_view<CharT, Traits>::size_type pos = 0,
typename basic_string_view<CharT, Traits>::size_type n =
basic_string_view<charT, Traits>::npos,
CharT zero = CharT('0'),
CharT one = CharT('1')); // (4) C++26
template <class CharT>
explicit bitset(
const CharT* str,
typename basic_string<CharT>::size_type n = basic_string<CharT>::npos,
CharT zero = CharT('0'),
CharT one = CharT('1')); // (5) C++11
template <class CharT>
constexpr explicit bitset(
const CharT* str,
typename basic_string<CharT>::size_type n = basic_string<CharT>::npos,
CharT zero = CharT('0'),
CharT one = CharT('1')); // (5) C++23
template <class CharT>
constexpr explicit bitset(
const CharT* str,
typename basic_string_view<CharT>::size_type n = basic_string_view<CharT>::npos,
CharT zero = CharT('0'),
CharT one = CharT('1')); // (5) C++26
bitsetオブジェクトの構築
- (1) : デフォルトコンストラクタ
- (2) : 整数値を受け取るコンストラクタ
- (3) :
'0'
と'1'
の文字で構成されるbasic_string
文字列からビット列を構築する - (4) :
'0'
と'1'
の文字で構成されるbasic_string_view
オブジェクトからビット列を構築する - (5) :
'0'
と'1'
の文字で構成される文字配列からビット列を構築する
要件
- (3), (4) :
pos <= str.size()
効果
- (1) : 全てのビットを
0
に初期化する。 - (2) : 整数値
val
でビット列を初期化する。bitset
クラスのテンプレートパラメータN
とval
のビット数のうち、小さい方の大きさで表現可能なビット列となる。クラステンプレートパラメータN
よりもval
のビット数の方が小さい場合は、残りのビットを0
で初期化する。 - (3), (4) : 文字列
str
でビット列を初期化する。- ビット列として扱う文字列は
str
のn
文字目以降である。n == npos
の場合はstr
の全文字列を使用する。対象となる文字列範囲をrstr
とする。 - C++03 : 文字列
rstr
に含まれる文字CharT('0')
をビット値0
、文字CharT('1')
をビット値1
と見なし、対応する値でビット列を構築する。 - C++11 : 文字列
rstr
に含まれる文字zero
をビット値0
、文字one
をビット値1
と見なし、対応する値でビット列を構築する。 - クラステンプレートパラメータ
N
と文字列rstr
の長さのうち、小さい方の大きさで表現可能なビット列となる。クラステンプレートパラメータN
よりも文字列rstr
の長さの方が小さい場合は、残りのビットを0
で初期化する。
- ビット列として扱う文字列は
- (5) : 以下のように初期化する:
bitset(
n == basic_string<CharT>::npos
? basic_string<CharT>(str)
: basic_string<CharT>(str, n), 0, n, zero, one)
例外
- (3), (4) :
pos > str.size()
の場合、out_of_range
例外を送出する。- C++03 :
str
に'0'
と'1'
以外の文字が含まれていた場合、invalid_argument
例外を送出する。 - C++11 :
str
にzero
とone
以外の文字が含まれていた場合、invalid_argument
例外を送出する。
- C++03 :
- (5) :
str
にzero
とone
以外の文字が含まれていた場合、invalid_argument
例外を送出する。
例
#include <iostream>
#include <bitset>
int main()
{
// (1) デフォルト構築
{
std::bitset<4> bs;
std::cout << "(1) : " << bs << std::endl;
}
// (2) 整数値から構築
{
std::bitset<4> bs(10uL);
std::cout << "(2) : " << bs << std::endl;
}
// (3) stringから構築
{
std::bitset<4> bs(std::string("1010"));
std::cout << "(3) : " << bs << std::endl;
}
// (4) string_viewから構築
{
std::bitset<4> bs{std::string_view("1010")};
std::cout << "(4) : " << bs << std::endl;
}
// (5) 文字配列から構築
{
std::bitset<4> bs("1010");
std::cout << "(5) : " << bs << std::endl;
}
}
出力
(1) : 0000
(2) : 1010
(3) : 1010
(4) : 1010
(5) : 1010
処理系
- (5)のコンストラクタ
- Clang: 3.0
- GCC: 4.5.4
- Visual C++: 2012, 2013, 2015
参照
- LWG Issue 778.
std::bitset
does not have any constructor taking a string literal- (5)のコンストラクタが追加された経緯となるレポート
- P2417R2 A more constexpr bitset
- P2697R1 Interfacing
bitset
withstring_view
- C++26から
string_view
を受け取るコンストラクタが追加された
- C++26から