operator<<,>>(std::bitset)
来自 cppreference.com
定义于头文件 <bitset> |
||
template< class CharT, class Traits, std::size_t N > std::basic_ostream<CharT, Traits>& |
(1) | |
template< class CharT, class Traits, std::size_t N > std::basic_istream<CharT, Traits>& |
(2) | |
从字符流中插入或提取一个 bitset。
1) 将 bitset x 写入字符流 os,如同先使用 to_string() 将其转换为 std::basic_string<CharT, Traits>,然后再使用 operator<<(它是字符串的 FormattedOutputFunction)将其写入 os。
用于表示 1 和 0 的字符是通过调用 std::use_facet<std::ctype<CharT>>(os.getloc()).widen() 并以 '1' 和 '0' 作为参数从当前 imbued 的区域设置中获取的。
用于表示 1 和 0 的字符是通过调用 std::use_facet<std::ctype<CharT>>(os.getloc()).widen() 并以 '1' 和 '0' 作为参数从当前 imbued 的区域设置中获取的。
2) 表现为 格式化输入函数。在构造并检查了可能跳过前导空格的 sentry 对象后,从 is 中提取最多 N 个字符,并将这些字符存储在位集 x 中。
字符将被提取,直到:
字符将被提取,直到:
- 已读取 N 个字符,
- is 中出现文件结尾,或
- 下一个字符既不是 is.widen('0') 也不是 is.widen('1')。
内容 |
[编辑] 参数
os | - | 要写入的字符流 |
is | - | 要读取的字符流 |
x | - | 要读取或写入的位集 |
[编辑] 返回值
1) os
2) is
[编辑] 示例
运行此代码
#include <bitset> #include <iostream> #include <sstream> int main() { std::string bit_string = "001101"; std::istringstream bit_stream(bit_string); std::bitset<3> b1; bit_stream >> b1; // reads "001", stream still holds "101" std::cout << b1 << '\n'; std::bitset<8> b2; bit_stream >> b2; // reads "101", populates the 8-bit set as "00000101" std::cout << b2 << '\n'; }
输出
001 00000101
[编辑] 缺陷报告
以下行为更改缺陷报告已追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
LWG 303 | C++98 | 从 is 中提取单字节字符,但 CharT 可以有多个字节提取 CharT 并将其与加宽的 '0' 和 '1' 进行比较 |
LWG 396 C++98 |
operator<< 写入的内容与区域设置无关 | C++98 | 写入加宽的 '0' 和 '1' | LWG 3199 |
C++11 | C++98 | 提取 std::bitset<0> 始终设置 failbit |
此类提取从不设置 failbit |
[编辑] 另请参阅
执行二进制左移和右移 (公有成员函数) |