std:: setbase
|
定义于头文件
<iomanip>
|
||
|
/*unspecified*/
setbase
(
int
base
)
;
|
||
设置流的数值基数。当在表达式
out
<<
setbase
(
base
)
或
in
>>
setbase
(
base
)
中使用时,根据
base
的值更改流
out
或
in
的
basefield
标志:
-
值
16
将
basefield设置为 std::ios_base::hex 。 - 值 8 将 std::ios_base::oct 。
- 值 10 将 std::ios_base::dec 。
除了8、10或16之外的
base
值会将
basefield
重置为零,这对应于十进制输出和前缀相关的输入。
目录 |
参数
| base | - | basefield 的新值 |
返回值
一个未指定类型的对象,使得
-
如果
out
是类型为
std::
basic_ostream
<
CharT, Traits
>
的对象,则表达式
out
<<
setbase
(
base
)
- 具有类型 std:: basic_ostream < CharT, Traits > &
- 具有值 out
- 行为如同调用了 f ( out, base )
-
如果
in
是类型为
std::
basic_istream
<
CharT, Traits
>
的对象,则表达式
in
>>
setbase
(
base
)
- 具有类型 std:: basic_istream < CharT, Traits > &
- 具有值 in
- 行为如同调用了 f ( in, base )
其中函数 f 定义为:
void f(std::ios_base& str, int base) { // 设置基数字段 str.setf(base == 8 ? std::ios_base::oct : base == 10 ? std::ios_base::dec : base == 16 ? std::ios_base::hex : std::ios_base::fmtflags(0), std::ios_base::basefield); }
示例
#include <iomanip> #include <iostream> #include <sstream> int main() { std::cout << "解析字符串 \"10 0x10 010\"\n"; int n1, n2, n3; std::istringstream s("10 0x10 010"); s >> std::setbase(16) >> n1 >> n2 >> n3; std::cout << "十六进制解析结果: " << n1 << ' ' << n2 << ' ' << n3 << '\n'; s.clear(); s.seekg(0); s >> std::setbase(0) >> n1 >> n2 >> n3; std::cout << "前缀依赖解析结果: " << n1 << ' ' << n2 << ' ' << n3 << '\n'; std::cout << "十六进制输出: " << std::setbase(16) << std::showbase << n1 << ' ' << n2 << ' ' << n3 << '\n'; }
输出:
解析字符串 "10 0x10 010" 十六进制解析结果: 16 16 16 前缀依赖解析结果: 10 16 8 十六进制输出: 0xa 0x10 0x8
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 183 | C++98 |
setbase
仅能用于
std::ostream
或
std::istream
类型的流 |
可用于任意
字符流 |
参见
|
修改用于整数输入/输出的进制基数
(函数) |
|
|
控制是否使用前缀指示数值进制
(函数) |