c++11 标准模板(STL)(std::basic_ostream)(七)

news2024/11/14 13:35:58
定义于头文件 <ostream>
template<

    class CharT,
    class Traits = std::char_traits<CharT>

> class basic_ostream : virtual public std::basic_ios<CharT, Traits>

类模板 basic_ostream 提供字符流上的高层输出操作。受支持操作包含有格式输出(例如整数值)和无格式输出(例如生字符和字符数组)。此功能以 basic_streambuf 类所提供的接口实现,通过 basic_ios 基类访问。典型的实现中, basic_ostream 无非继承的数据成员。

 

杂项

与底层存储设备同步

std::basic_ostream<CharT,Traits>::flush

basic_ostream& flush();

写入未提交更改到底层输出序列。

若 rdbuf() 为空指针,则不做任何事。

否则,表现为无格式输出函数 (UnformattedOutputFunction) (C++11 起)。构造并检查 sentry 对象后,调用 rdbuf()->pubsync() 。若该调用返回 -1 ,则调用 setstate(badbit) 。

参数

(无)

返回值

*this

异常

若 exceptions()&badbit!=0 则可能抛出 std::ios_base::failure 。

调用示例

#include <thread>
#include <iostream>
#include <chrono>

void f()
{
    std::cout << "Output from thread...";
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::cout << "...thread calls flush()" << std::endl;
    std::cout.flush();
}

int main()
{
    std::thread t1(f);
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::clog << "Output from main" << std::endl;
    t1.join();
}

输出

 

交换流对象,除了关联缓冲区

std::basic_ostream<CharT,Traits>::swap

protected:
void swap(basic_ostream& rhs);

(C++11 起)

调用 basic_ios::swap(rhs) 交换 *this 和 rhs 间的基类数据成员,除了 rdbuf() 。此 swap 函数受保护:它为可交换输出流类 std::basic_ofstream 和 std::basic_ostringstream 的 swap 函数所调用,这些函数知晓如何正确交换关联的流缓冲。

参数

rhs-要与之交换的同类型 basic_ostream

调用示例

#include <sstream>
#include <iostream>
#include <utility>

int main()
{
    std::ostringstream s1("hello");
    std::ostringstream s2("bye");

    s1.swap(s2); // OK : ostringstream 拥有公开 swap()
    std::swap(s1, s2); // OK :调用 s1.swap(s2)

//  std::cout.swap(s2); // 错误: swap 是受保护成员

    std::cout << s1.str() << '\n';
}

 输出

 

成员类

为输出操作实现流准备的基本逻辑

std::basic_ostream<CharT,Traits>::sentry

class sentry;

basic_ostream::sentry 的对象在 std::basic_ostream 的每个进行输出(有格式与无格式)的成员函数起始的局部作用域中构造。其构造函数准备输出流:检查流是否已在失败状态,冲入所 tie() 的输出流,并且若需要则进行其他实现定义的任务。实现定义的清理,还有若有必要的输出流冲入,在析构函数中进行,从而保证若输出中抛出异常则得到执行。

成员函数

(构造函数)

构造 sentry 对象。所有准备任务都在此完成。
(公开成员函数)

(析构函数)

在有格式输入后或异常后终止化流对象,若有必要
(公开成员函数)

operator=

赋值运算符被删除
(公开成员函数)

operator bool

检查流对象的准备是否成功
(公开成员函数)

std::basic_ostream::sentry::sentry

explicit sentry( std::basic_ostream<CharT,Traits>& os );

为有格式输出准备流。

若 os.good() 为 false 则返回。否则若 os.tie() 不是空指针,则调用 os.tie()->flush() 以令输出序列同步于外部流。在准备中,构造函数可能调用 setstate(failbit) (它可能抛出 std::ios_base::failure )。

若在准备完成后 os.good() == true ,则任何对 operator bool 的后继调用都会返回 true 。

参数

os-要准备的输出流

异常

若文件尾条件出现则为 std::ios_base::failure。

 

std::basic_ostream::sentry::~sentry

~sentry();

若 (os.flags() & std::ios_base::unitbuf) && !std::uncaught_exception() && os.good()) 为 true ,则调用 os.rdbuf()->pubsync() 。若该函数返回 -1 ,则于 os.rdstate() 中设置 badbit ,而不传播异常。

std::basic_ostream::sentry::operator bool

explicit operator bool() const;

检查输出流的准备是否成功。

参数

(无)

返回值

若输出流的准备成功则为 true ,否则为 false 。

调用示例

#include <iostream>
#include <sstream>

struct Foo
{
    char n[6];
};

std::ostream& operator<<(std::ostream& os, Foo& f)
{
    std::ostream::sentry s(os);
    if (s)
    {
        os.write(f.n, 5);
    }
    return os;
}

int main()
{
    Foo f = { "abcde" };
    std::cout << f << '\n';
    return 0;
}

输出

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安信可蓝牙PB-02 SDK二次开发记录

目录 1.开发环境 & 烧录调试2.例程踩坑(1).编译烧录 watchdog 例程 1.开发环境 & 烧录调试 详细参考下面两篇教程 【安信可PB-01/02模组专题①】PB-01/02模组开发板应用- BLE-UART固件的使用教程 【安信可PB-01/02模组专题③】PB-01/02模组开发板应用-快速入门SDK二次…

代码随想录算法训练营第十天 | 二叉树系列1

二叉树系列1 二叉树理论基础注意点小记二叉树的种类二叉树的存储方式二叉树的遍历 要熟悉自己所用编程语言常用的数据容器的底层实现一定要会自己实现所用数据结构的定义 二叉树的递归遍历递归三部曲前中后序递归遍历前序遍历--我的代码前序遍历--代码随想录的代码中序遍历--我…

【解决】Pyinstaller打包报错IndexError: tuple index out of range

问题 这个问题主要是在Python3.7以上的版本中遇到&#xff0c;用pyinstaller打包的时候发现报错 /usr/local/lib/python3.10/dis.py argval const_list[const_index], IndexError: tuple index out of range解决方案 vim 进入报错的文件&#xff0c;/usr/local/lib/python…

Css 基础:选择器,三大特性

1.emmet的 快速格式化代码 配置 "editor.formatOnType": true, "editor.formatOnSave": true 2.基础选择器 3.复合选择器 4.单行文本垂直居中原理 5.css背景 6.CSS三大特性 层叠性&#xff1a;相同选择器设置相同样式&#xff0c;发生在样式冲突时&#xf…

VUE:el-button里面的倒计时显示,验证码发送后两分钟倒计时

验证码倒计时显示 框架需求样式图代码template部分script部分style部分部分内容解读 框架 UI&#xff1a;elementUI 前端&#xff1a;vue 需求 发送验证码后&#xff0c;2分钟内不可以在发送&#xff0c;button置灰&#xff0c;120s后可以点击重新发送验证码 样式图 代码 …

【算法设计与分析】拉丁矩阵问题——对于给定的m和n,计算出不同的宝石排列方案数。

问题描述 现有n种不同形状的宝石&#xff0c;每种宝石有足够多颗。欲将这些宝石排列成m行n列的一个矩阵&#xff0c;m≤n&#xff0c;使矩阵中每行和每列的宝石都没有相同的形状。试设计一个算法&#xff0c;计算出对于给定的m和n&#xff0c;有多少种不同的宝石排列方案。 数…

Java 基础进阶篇(三):权限修饰符、final 关键字与枚举

文章目录 一、权限修饰符二、final 关键字2.1 final 作用2.2 final 修饰变量举例2.3 常量三、枚举3.1 枚举的格式3.2 枚举的特征3.3 枚举的应用 一、权限修饰符 权限修饰符 用于约束成员变量、构造器、方法等的访问范围。 权限修饰符&#xff1a; 有四种作用范围由小到大 (priv…

Unity 如何导入二进制Spine文件

Unity 如何导入二进制Spine文件 前言步骤1.修改拓展名2.修改参数3.导出文件4.导入文件5.修改材质球属性6.生成动画 参考 前言 总是忘记Spine导出二进制到Unity的设置&#xff0c;记录一下。 步骤 1.修改拓展名 纹理打包器也修改一下拓展名&#xff08;日常操作&#xff09;…

word@制表位和列数据对齐@填空下划线制作

文章目录 refs制表位(tab stop)制表位类型 制作对其的下划线填空表单&#x1f47a;利用前导符代替下划线制作待填空下划线 制表位对其列数据模拟简单表格测试数据设置引线使用标尺设置 FAQ refs Insert or add tab stops - Microsoft SupportUsing the ruler in Word - Micros…

GaN HEMT主要性能指标有哪些?宽禁带材料电性能测试方案

GaN HEMT器件性能的评估&#xff0c;一般包含静态参数测试&#xff08;I-V测试&#xff09;、频率特性&#xff08;小信号S参数测试&#xff09;、功率特性&#xff08;Load-Pull测试&#xff09;。静态参数&#xff0c;也被称作直流参数&#xff0c;是用来评估半导体器件性能…

JVM理论(一)-基础概念

JVM概述 JVM就是二进制字节码的运行环境,负责装载字节码到其内存,解释/编译为对应平台上的机器指令执行,每条java指令在java虚拟机规范中都有详细定义,包括如何取、处理操作数等;JVM特点如下 一次编译,到处运行&#xff08;各CPU的架构不同的情况下JVM为了实现跨平台,字节码指…

fastadmin使用PHPexcel上传文件处理兼容问题 (已解决)

介绍 fastadmin&#xff1a;支持使用7.0以上版本的PHP PHPexcel&#xff1a;不支持使用7.0以上的PHP版本 2.下载地址 https://codeload.github.com/PHPOffice/PHPExcel/zip/1.8 3&#xff1a;解决兼容 将文件导入到vendor下面&#xff0c;创建一个函数来使用这个文件&…

5.8.10 TCP协议

5.8.10 TCP协议 我们通过一个实例来看一下TCP协议 如图 图中是六个IP数据报的前40个字节的内容&#xff0c;使用的是16进制数表示的&#xff0c;该数据报的背景如下图 主机H通过快速以太网连接Internet&#xff0c;主机H的IP地址是192.168.1.100&#xff0c;服务器S的IP地址是…

高迸发 架构设计方案

前言 ​​在实际生活业务场景开发中&#xff0c;在我们的网站知名度越来越大的时候&#xff0c;随之而来的就是业务体量越来越大&#xff0c;用户群体越来越大&#xff0c;随之而来的技术要求也越来越高&#xff0c;其中核心点对网站的稳定性要求是硬性的。如果一个系统都无法…

新装idea的一些常用设置

新装idea的一些常用设置 新安装的idea常用配置 1、提示内容忽略大小写 File -> Settings -> Editor -> General -> Code Completion -> Match case 2、修改字体大小 File -> Settings -> Editor -> Font -> Size 3、取消启动时自动打开最后开…

阿里云国际站:阿里云计算服务指的是什么?

标题&#xff1a;阿里云计算服务指的是什么&#xff1f; 一、阿里云计算服务的定义   阿里云计算服务&#xff0c;是阿里巴巴集团旗下的云服务平台&#xff0c;提供了从云服务器、云数据库到大数据处理等丰富的云计算服务。它通过构建一种共享的计算资源池&#xff0c;使得用…

《SpringBoot》第05章 配置文件解析

前言 SpringBoot中的application.properties(或application.yaml)文件都是再熟悉不过的了。它是应用的配置文件&#xff0c;我们可以把需要的一些配置信息都写在这个文件里面&#xff0c;需要的时候&#xff0c;我们可以通过Value注解来直接获取即可&#xff0c;那这个文件是什…

deepstream指北——python接口的使用

目录 一、机器配置二、环境配置三、运行实例 一、机器配置 电脑&#xff1a;台式机系统&#xff1a;Ubuntu 20.04.5显卡&#xff1a;GTX 1070&#xff0c;8G显存软件版本&#xff1a;deepstream&#xff1a;6.1.1显卡驱动版本&#xff1a;515.76CUDA版本&#xff1a;11.7.1cud…

基于PyQt5的桌面图像调试仿真平台开发(10)色彩矩阵

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

当赛博朋克碰上小鸡舞 segment anything

Segment Anything能给我们做什么 前言内容具体实现成果 前言 最近&#xff0c;大模型的热度确实是非常非常的高&#xff0c;从chatgpt到segment anything&#xff0c;这些东西整的我这刚入门的小白确实有点懵逼。最近实在是不知道干啥&#xff0c; 想想能不能用大模型整点花活…