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

定义于头文件 <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 无非继承的数据成员。

 

全局对象

标准库提供六个全局 basic_ostream 对象。

写入到标准 C 输出流 stdout

std::cout, 
std::wcout

extern std::ostream cout;

(1)

extern std::wostream wcout;

(2)

 全局对象 std::coutstd::wcout 控制到实现定义类型流缓冲(导出自 std::streambuf )的输出,它与标准 C 输出流 stdout 关联。

保证这些对象在首次构造 std::ios_base::Init 类型对象期间或之前初始化,并可用于拥有有序初始化的静态对象的构造函数和析构函数(只要在定义对象前包含 <iostream> )。

除非发行 sync_with_stdio(false) ,否则从多个线程为有格式和无格式输出同时访问这些对象是安全的。

一旦初始化,则 std::cout 被 tie() 到 std::cin 而 std::wcout 被 tie() 到 std::wcin ,这表示任何 std::cin 上的输入操作执行 std::cout.flush() (通过 std::basic_istream::sentry 构造函数)。

一旦初始化,则 std::cout 亦被 tie() 到 std::cerr 而 std::wcout 被 tie() 到 std::wcerr ,这表示任何 std::cerr 上的输入操作执行 std::cout.flush() (通过 std::basic_istream::sentry 构造函数)。(C++11)

注意

名称中的 'c' 指代“字符”( stroustrup.com FAQ ); cout 表示“字符输出”而 wcout 表示“宽字符输出”。

调用示例

#include <iostream>
struct Foo
{int n;Foo(){std::cout << "static constructor\n";}~Foo(){std::cout << "static destructor\n";}
};Foo f; // 静态对象int main()
{std::cout << "main function\n";
}

输出

 

写入到标准 C 错误流 stderr, 无缓冲

std::cerr, 
std::wcerr

extern std::ostream cerr;

(1)

extern std::wostream wcerr;

(2)

 全局对象 std::cerrstd::wcerr 控制到实现定义类型(分别导出自 std::streambuf 和 std::wstreambuf )的流缓冲,与标准 C 错误输出流 stderr 关联。

保证这些对象在构造首个 std::ios_base::Init 类型对象之前或期间得到初始化,而且可用于带有序初始化的静态对象的构造函数和析构函数(只要在定义对象前包含 <iostream> )。

除非发布 sync_with_stdio(false) ,从多个线程为有格式和无格式输出访问这些对象是安全的。

一旦初始化,则 (std::cerr.flags() & unitbuf) != 0 ( wcerr 也一样),这表示任何发送给这些流对象的输出都被立即冲入到 OS (通过 std::basic_ostream::sentry 的析构函数)。

另外, std::cerr.tie() 返回 &std::cout (对 wcerrwcout 相同),这表示任何 std::cerr 上的输出首先执行 std::cout.flush() (通过 std::basic_ostream::sentry 的构造函数)。(C++11 起)

注意

名称中的 'c' 指代“字符”( stroustrup.com FAQ ); cerr 表示“字符错误(流)”而 wcerr 表示“宽字符错误(流)”。

调用示例

#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;
}int main()
{std::thread t1(f);std::this_thread::sleep_for(std::chrono::seconds(1));std::clog << "This output from main is not tie()'d to cout\n";std::cerr << "This output is tie()'d to cout\n";t1.join();
}

输出

 

写入到标准 C 错误流 stderr

std::clog, 
std::wclog

extern std::ostream clog;

(1)

extern std::wostream wclog;

(2)

 全局对象 std::clogstd::wclog 控制实现定义类型(导出自 std::streambuf )的流缓冲,与标准 C 输出流 stderr 关联,但不同于 std::cerr/std::wcerr ,不自动冲入这些流,且不自动与 cout tie() 。

保证这些对象在构造首个 std::ios_base::Init 类型对象之前或期间得到初始化,而且可用于带有序初始化的静态对象的构造函数和析构函数(只要在定义对象前包含 <iostream> )。

除非发布 sync_with_stdio(false) ,从多个线程为有格式和无格式输出访问这些对象是安全的。

注意

名称中的 'c' 指代“字符”( stroustrup.com FAQ ); clog 表示“字符日志”而 wclog 表示“宽字符日志”。

调用示例

#include <iostream>struct Foo
{int n;Foo(){std::clog << "static constructor\n";}~Foo(){std::clog << "static destructor\n";}
};Foo f; // 静态对象int main()
{std::clog << "main function\n";
}

输出

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SQL应知应会】分析函数的点点滴滴(二)

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分析函数的点点滴滴 1.什么是分析函数&#xff1a;…

【Java-SpringBoot+Vue+MySql】前后端分离项目云端部署

目录 部署环境&#xff1a; 安装MYSQL&#xff1a; 安装Nginx 安装配置JDK 远程连接数据库 前端打包 后端打包 心得&#xff1a; 部署环境&#xff1a; CentOS7.6 MySQL5.7 JDK1.8 Nginx1.8 下载MySQL MySQL :: Download MySQL Community Server (Archived Versions) …

【探索 Kubernetes|作业管理 Deployment 篇 系列 12】水平扩展 / 收缩、滚动 / 回滚更新

前言 大家好&#xff0c;我是秋意零。 在上一篇中&#xff0c;我们介绍了控制器的基本设计思想&#xff1a;控制器模式。通过这个 “控制器模式” 我们来看看 Deployment 是如何依靠它来实现的。 最近搞了一个扣扣群&#xff0c;旨在技术交流、博客互助&#xff0c;希望各位…

IBM N系列存储和NetApp FAS之间的对应关系

IBM在很长一段时间都是OEM NetApp的FAS存储作为他的NAS产品线&#xff0c;在IBM叫做Storage N series&#xff0c;就是N系列&#xff0c;在2014年IBM终止了和NetApp之间的OEM关系&#xff0c;目前在市场上的OEM的NetApp存储型号主要是 FAS3000&#xff0c;FAS31和FAS32的中端系…

MySQL-SQL视图详细

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

chatgpt赋能python:同一个python文件能同时运行多次吗?

同一个python文件能同时运行多次吗&#xff1f; Python作为一种高级编程语言&#xff0c;具有丰富的语法和功能。在编写Python程序时&#xff0c;我们常常需要考虑不同的需求。有时我们可能需要使用相同的python文件运行不同的程序&#xff0c;这时候很自然的问题就会出现&…

数据结构--单链表的查找

数据结构–单链表的查找 均以带头结点链表为例 目标&#xff1a; GetElem(Li):按位查找操作。获取表L中第i个位置的元素的值。 LocateElem(L,e):按值查找操作。在表L中查找具有给定关键字值的元素。 按位查找 按位查找,返回第i 个元素&#xff08;带头结点) 代码实现 typ…

Diffusion详细学习

解决报错 https://zhuanlan.zhihu.com/p/622238031 原理&#xff1a;https://zhuanlan.zhihu.com/p/612854566 解决内存溢出问题 溢出问题 总结下来&#xff1a;batch_size 和 n_samples 调节 原理学习 扩散模型是一种生成模型&#xff0c;用于生成与训练数据相似的数据。…

go语言学习笔记1

go语言简介 ​ GoLang是一种静态强类型、编译型、并发型&#xff0c;并具有垃圾回收功能的编程语言&#xff1b;它可以在不损失应用程序性能的情况下极大的降低代码的复杂性&#xff0c;还可以发挥多核处理器同步多工的优点&#xff0c;并可解决面向对象程序设计的麻烦&#x…

架构基本概念和架构本质

什么是架构和架构本质 在软件行业&#xff0c;对于什么是架构&#xff0c;都有很多的争论&#xff0c;每个人都有自己的理解。此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前&#xff0c;我们先讨论架构的概念定义&#xff0c;概念是人认识这个世界的基础…

从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题

目录 1. 多态&#xff08;polymorphism&#xff09; 1.1 构成多态的两个条件 1.2 虚函数重写(覆盖) 1.3 协变构成多态 1.4 父虚子非虚构成多态 1.5 析构函数的重写 1.6 final 和 override 关键字&#xff08;C11&#xff09; 1.7 重载、覆盖、隐藏的对比 2. 抽象类&am…

Mysql_5.7下载及安装(CentOS7)

文章目录 安装MySQL的几种方式一、 使用docker安装MySQL1.1 卸载旧版本&#xff08;如果存在docker&#xff0c;需先卸载旧版本&#xff09;1.2 安装Docker使用存储库安装(推荐使用) 1.3 安装mysql5.7.35(普通用户下)*** 安装MySQL:5.7.35镜像*** 进入容器中查看配置文件以及数…