c++11 标准模板(STL)(std::ios_base)(四)

news/2024/7/7 21:23:20
定义于头文件 <ios>

class ios_base;

ios_base 是作为所有 I/O 流类的基类工作的多用途类。它维护数种数据:

1) 状态信息:流状态标志;

2) 控制信息:控制输入和输出序列格式化和感染的本地环境的标志;

3) 私有存储:允许 long 和 void* 成员的有下标可扩展数据结构,它可以实现为二个任意长度的数组,或二元素结构体的单个数组,或另一容器;

4) 回调:从 imbue() 、 copyfmt() 和 ~ios_base() 调用的任意数量用户定义函数。

典型实现保有对应下列 fmtflags 、 iostate 、 openmode 及 seekdir 所有值的成员常量,维护当前精度、宽度、格式化标志、异常掩码、缓冲区错误状态、保有回调的可调大小容器、当前感染的 locale 、私有存储的成员变量及 xalloc() 所用的静态整数变量。

杂项

注册事件回调函数

std::ios_base::register_callback

void register_callback( event_callback function, int index );

注册将为 imbue() 、 std::basic_ios::copyfmt() 和 ~ios_base() 调用的用户定义函数。每次都调用每个注册的回调:事件类型( event 类型值)作为首参数传递,而且可用于区别调用方。

以注册的逆序调用回调(换言之, register_callback() 在回调栈上推入回调对)。若在回调函数内调用 register_callback() 添加新回调,则只在下次事件发生时调用新回调。

不允许用户定义的回调抛异常。

参数

function-事件发生时将调用的函数,作为 event_callback 类型函数指针提供
index-将传递给函数的自定义参数

返回值

(无)

注意

一旦注册,则不能解除注册回调:它在流对象剩下的生存期中保留为其一部分。若需要更改回调的行为,则可通过 iword() 或 pword() 控制。

若注册同一函数多次,则调用它多次。

与回调一同存储的整数值典型地为从 xalloc() 获得的下标。

设置C++和C的IO库是否可以互操作

std::ios_base::sync_with_stdio

static bool sync_with_stdio( bool sync = true );

设置标准 C++ 流是否与标准 C 流在每次输入/输出操作后同步。

标准 C++ 流为下列者: std::cin 、 std::cout 、 std::cerr 、 std::clog 、 std::wcin 、 std::wcout 、 std::wcerr 和 std::wclog 。

标准 C 流为下列者: stdin 、 stdout 和 stderr 。

对于与 C 流 f 同步的标准流 str ,下列函数对拥有等同的效果:

1) std::fputc(f, c) 和 str.rdbuf()->sputc(c)

2) std::fgetc(f) 和 str.rdbuf()->sbumpc()

3) std::ungetc(c, f) 和 str.rdbuf()->sputbackc(c)

实践中,这表示同步的 C++ 流为无缓冲,而每次 C++ 流上的 I/O 都立即应用到对应 C 流的缓冲区。这使得能自由地混合 C++ 与 C I/O 。

另外,同步的 C++ 流保证为线程安全(从多个线程输出的单独字符可能交错,但无数据竞争)。

若关闭同步,则允许 C++ 标准流独立地缓冲其 I/O ,可认为这在某些情况下更快。

所有八个标准 C++ 流默认与其相应的 C 流同步。

若在标准流上已出现 I/O 后调用此函数,则行为是实现定义的:有的实现无效果,有的实现销毁读取缓冲区。

参数

sync-新的同步设置

返回值

调用函数前的同步状态

成员类

流异常

std::ios_base::failure

class failure;

std::ios_base::failure 定义输入/输出库中的函数在失败时抛出的异常对象。

std::ios_base::failure 可以定义为 std::ios_base 的成员类,或拥有等价功能的另一个类的同义词( typedef )。 (C++17 起)

成员函数

(构造函数)

构造异常对象
(公开成员函数)

std::ios_base::failure::failure

explicit failure( const std::string& message );

(C++11 前)

explicit failure( const std::string& message,
                  const std::error_code& ec = std::io_errc::stream );

(C++11 起)

explicit failure( const char* message,
                  const std::error_code& ec = std::io_errc::stream );

(C++11 起)

message 为解释性字符串构造异常对象,能在之后用 what() 取得。

参数

message-解释性字符串

继承自 std::system_error

成员函数

code

返回错误码
(std::system_error 的公开成员函数)

what

[虚]

返回解释性字符串
(std::system_error 的虚公开成员函数)

继承自 std::runtime_error

继承自 std::exception

成员函数

(析构函数)

[虚]

析构该异常对象
(std::exception 的虚公开成员函数)

what

[虚]

返回解释性字符串
(std::exception 的虚公开成员函数)

初始化标准流对象

std::ios_base::Init

class Init;

此类用以确保默认 C++ 流( std::cin 、 std::cout 等)被正确初始化及析构。此类跟踪它被创建的实例数量,在构造首个实例时创建并初始化 C++ 流,并且在析构最后实例时冲入输出流。

头文件 <iostream> 表现如同它定义(直接或间接)一个有静态存储期的 std::ios_base::Init 实例:这使得在拥有有序初始化的静态对象的构造函数及析构函数中,访问标准 I/O 流是安全的(只要在翻译单元中,定义该对象前包含 #include <iostream> )。

成员函数

(构造函数)

若 *this 是首次创建的实例,则初始化默认 C++ 流
(公开成员函数)

(析构函数)

若 *this 是被最后销毁的实例,则冲入默认 C++ 流
(公开成员函数)

http://lihuaxi.xjx100.cn/news/1243273.html

相关文章

四个强制类型转换reinterpret_castconst_caststatic_cast dynamic_cast及比较

四个强制类型转换reinterpret_cast/const_cast/static_cast /dynamic_cast及比较 reinterpret_cast reinterpret_cast 是一种 C 转换运算符&#xff0c;允许程序员在不更改原始对象的情况下将指针或引用转换为不同的类型。 它是一个非常强大且具有潜在危险的运算符&#xff0…

深入剖析@RequestBody、@PathVariable和@RequestParam注解

当我们在开发服务端方法时&#xff0c;遇到给方法传参的有几个不同的注解&#xff0c;今天我们来介绍 RequestBody、PathVariable 和 RequestParam 这几个注解的定义和使用场景示例&#xff0c;以便于同学们理解和掌握。 RequestBody 注解&#xff1a; 定义&#xff1a; Reques…

CVE-2023-0215

mysql 安全漏洞 生产版本&#xff1a;5.5 漏洞编号&#xff1a; CVE编号 CVE-2023-0215 CNNVD编号 CNNVD-202302-521 另外还有以下其他漏洞&#xff1a; 解决办法&#xff1a; 1.下载补丁需要CSI,买了oracle服务才可能会有这个认证码&#xff1b; 2.没有这个认证码&#…

阿里云PAIx达摩院GraphScope开源基于PyTorch的GPU加速分布式GNN框架

作者&#xff1a;艾宝乐 导读 近期阿里云机器学习平台 PAI 团队和达摩院 GraphScope 团队联合推出了面向 PyTorch 的 GPU 加速分布式 GNN 框架 GraphLearn-for-PyTorch(GLT) 。GLT 利用 GPU 的强大并行计算性能来加速图采样&#xff0c;并利用 UVA 来减少顶点和边特征的转换和…

【数据结构】数据结构与算法基础 课程笔记 第八章 排序

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;【数据结构】 &#x1f4ac;总结&#xff1a;希望看完之后&#xff0c;能…

ROS-melodic:源码安裝teb_local_planner算法、替换DWA算法

一.安裝teb_local_planner算法 源码下载地址&#xff1a;GitHub - rst-tu-dortmund/teb_local_planner: An optimal trajectory planner considering distinctive topologies for mobile robots based on Timed-Elastic-Bands (ROS Package) 注意选择对应ROS版本的代码。 放在…

作为一个优秀的项目经理,你需要做什么?

经常看到这样的项目经理&#xff0c;一副整天忙得团团转的样子&#xff0c;整天忙得团团转&#xff0c;发出一大堆指令&#xff0c; 经常事无巨细都要亲自过问&#xff0c;他还会不断抱怨说&#xff1a; " 我很忙 " 或 " 我很累 " &#xff0c; " 我…

AB32VG1:SDK_AB53XX_V061(5)蓝牙BLE测试笔记

文章目录 1.配置工程&#xff0c;重新编译1.1替换链接库libbtstack_dm.a1.2 《config.h》打开编译开关1.3 在 Downloader 里面打开 BLE 开关 2.ABLink&#xff08;手机APP&#xff09;控制2.1 app下载2.2 安装后打开&#xff0c;搜索蓝牙Bluetrum&#xff1a;2.3 操作存储卡 3.…