C++标准模板(STL)- 输入/输出操纵符-(std::resetiosflags,std::setiosflags)

操纵符是令代码能以 operator<< 或 operator>> 控制输入/输出流的帮助函数。

不以参数调用的操纵符(例如 std::cout << std::boolalpha; 或 std::cin >> std::hex; )实现为接受到流的引用为其唯一参数的函数。 basic_ostream::operator<< 和 basic_istream::operator>> 的特别重载版本接受指向这些函数的指针。这些函数(或函数模板的实例化)是标准库中仅有的可取址函数。 (C++20 起)

以参数调用的操纵符(例如 std::cout << std::setw(10); )实现为返回未指定类型对象的函数。这些操纵符定义其自身的进行请求操作的 operator<< 或 operator>> 。

定义于头文件 <iomanip>

清除指定的 ios_base 标志

std::resetiosflags

/*unspecified*/ resetiosflags( std::ios_base::fmtflags mask );

用于表达式 out << resetiosflags(mask) 或 in >> resetiosflags(mask) 中时,清除流 outinmask 所指定的所有格式标志。

参数

mask-要清除的标志位掩码

返回值

返回未指定类型的对象,使得若 str 是 std::basic_ostream<CharT, Traits> 或 std::basic_istream<CharT, Traits> 类型的流名称,则表达式 str << resetiosflags(mask) 或 str >> resetiosflags(mask) 表现为如同执行下列代码:

str.setf(std::ios_base::fmtflags(0), mask);

调用示例

#include <sstream>
#include <iostream>
#include <iomanip>

int main()
{
    std::istringstream in("10 010 10 010 10 010");
    int n1, n2;
    in >> std::oct >> n1 >> n2;
    std::cout << "Parsing \"10 010\" with std::oct gives:  "
              << n1 << ' ' << n2 << std::endl;
    in >> std::dec >> n1 >> n2;
    std::cout << "Parsing \"10 010\" with std::dec gives:  "
              << n1 << ' ' << n2 << std::endl;
    in >> std::resetiosflags(std::ios_base::basefield) >> n1 >> n2;
    std::cout << "Parsing \"10 010\" with autodetect gives: "
              << n1 << ' ' << n2 << std::endl;

    return 0;
}

输出

设置指定的 ios_base 标志

std::setiosflags

/*unspecified*/ setiosflags( std::ios_base::fmtflags mask );

用于表达式 out << setiosflags(mask) 或 in >> setiosflags(mask) 时,设置流 outin 的所有格式标志为 mask 所指定者。

参数

mask-要设置的位掩码标志

返回值

返回未指定类型的对象,使得若 str 为 std::basic_ostream<CharT, Traits> 或 std::basic_istream<CharT, Traits> 类型的流名称,则表达式 str << setiosflags(mask) 或 str >> setiosflags(mask) 表现为如同执行下列代码:

str.setf(mask);

 调用示例

#include <iostream>
#include <iomanip>

int main()
{
    std::cout <<  std::resetiosflags(std::ios_base::dec)
              <<  std::setiosflags(std::ios_base::hex
                                   | std::ios_base::uppercase
                                   | std::ios_base::showbase) << 42 << std::endl;

    return 0;
}

输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值