c++11 标准模板(STL)(std::basic_ios)(三)

news2024/11/17 11:55:33

定义于头文件 <ios>

template<

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

> class basic_ios : public std::ios_base

类 std::basic_ios 提供设施,以对拥有 std::basic_streambuf 接口的对象赋予接口。数个 std::basic_ios 对象能指涉一个实际的 std::basic_streambuf 对象。

继承图

 

还提供了两个对常见的字符类型的特化:

类型定义
iosbasic_ios<char>
wiosbasic_ios<wchar_t>


状态函数

检查是否没有发生错误,例如是否可执行I/O操作

std::basic_ios<CharT,Traits>::good

bool good() const;

若流上的最近 I/O 操作成功完成则返回 true 。特别是返回 rdstate() == 0 的结果。

设置流状态位的条件列表,见 ios_base::iostate 。

参数

(无)

返回值

若流未出现错误则为 true ,否则为 false 。

检查是否到达了文件末尾

std::basic_ios<CharT,Traits>::eof

bool eof() const;

若关联流已抵达文件尾则返回 true 。尤其是若 rdstate() 中设置了 eofbit 则返回 true 。

设置 eofbit 的条件列表见 ios_base::iostate 。

参数

(无)

返回值

若遇到文件尾条件则为 true ,否则为 false 。

注意

此函数只报告最近的 I/O 操作所设置的流状态;它不检测关联的数据源。例如,若最近的 I/O 为返回文件最后字节的 get() ,则 eof() 返回 false 。下个 get() 无法读取任何内容,并设置 eofbit 。之后 eof() 才返回 true 。

典型使用中,输入流处理在任何错误上停止。然后能用 eof() 和 fail() 区别不同的错误条件。

检查是否发生了可恢复的错误

std::basic_ios<CharT,Traits>::fail

bool fail() const;

若关联流上已发生错误则返回 true 。特别是若 rdstate() 中设置了 badbitfailbit 则返回 true 。

设置 failbitbadbit 的条件列表见 ios_base::iostate 。

参数

(无)

返回值=

若已出现错误则为 true ,否则为 false 。

检查是否已发生不可恢复的错误

std::basic_ios<CharT,Traits>::bad

bool bad() const;

若关联的流上已出现不可恢复的错误则返回 true 。尤其是若 rdstate() 中设置了 badbit 则返回 true 。

设置 badbit 的条件列表见 ios_base::iostate 。

参数

(无)

返回值

若出现不可恢复的错误则为 true ,否则为 false 。

检查是否有错误发生(fail() 的同义词)

std::basic_ios<CharT,Traits>::operator!

bool operator!() const;

若关联流上已出现错误则返回 true 。特别是若 rdstate() 中设置了 failbitbadbit 则返回 true 。

参数

(无)

返回值

若已出现错误则为 true ,否则为 false 。

调用示例 

#include <iostream>
#include <fstream>
#include <cstdlib>

int main()
{
    std::ifstream file("test.txt");
    if (!file) // operator! 用于此
    {
        std::cout << "File opening failed\n";
        return EXIT_FAILURE;
    }

    // 典型的 C++ I/O 循环以 I/O 函数的返回值为循环控制条件,
    // operator bool() 用于此
    for (int n; file >> n;)
    {
        std::cout << n << ' ';
    }
    std::cout << '\n';

    if (file.bad())
    {
        std::cout << "I/O error while reading\n";
    }
    else if (file.eof())
    {
        std::cout << "End of file reached successfully\n";
    }
    else if (file.fail())
    {
        std::cout << "Non-integer data encountered\n";
    }
}

检查是否没有发生错误(!fail()的同义词)

std::basic_ios<CharT,Traits>::operator bool

operator void*() const;

(1)(C++11 前)

explicit operator bool() const;

(2)(C++11 起)

检查流是否无错误。

1) 若 fail() 返回 true 则返回空指针,否则返回非空指针。此指针可隐式转换为 bool ,并可用于布尔语境。

2) 若流无错误且已为 I/O 操作就绪则返回 true 。尤其是返回 !fail() 。

此运算符使得以流和返回到流引用的函数为循环条件可行,产生惯用的 C++ 输入循环,例如 while(stream >> value) {...} 或 while(getline(stream, string)){...} 。这种循环仅若输入操作成功才执行循环体。

参数

(无)

返回值

若流无错误则为 true ,否则为 false 。

 调用示例

#include <iostream>
#include <sstream>

int main()
{
    std::istringstream s("1 2 3 error");
    int n;
    std::cout << std::boolalpha << "s is " << static_cast<bool>(s) << '\n';
    while (s >> n)
    {
        std::cout << n << '\n';
    }
    std::cout << "s is " << static_cast<bool>(s) << '\n';
}

返回状态标志

std::basic_ios<CharT,Traits>::rdstate

iostate rdstate() const;

返回当前错误状态。

参数

(无)

返回值

当前错误状态。它是位掩码类型,并且能是下列常量的组合:

常量解释
goodbit无错误
badbit不可恢复的流错误
failbit输入/输出操作失败(格式化或提取错误)
eofbit关联的输出序列已抵达文件尾

调用示例

#include <iostream>
#include <sstream>

int main()
{
    std::ostringstream stream;

    if (stream.rdstate() == std::ios_base::goodbit)
    {
        std::cout << "stream state is goodbit\n";
    }

    stream.setstate(std::ios_base::eofbit);

    // 检查状态为准确的 eofbit (无 failbit 且无 badbit )
    if (stream.rdstate() == std::ios_base::eofbit)
    {
        std::cout << "stream state is eofbit\n";
    }
}

 

设置状态标志

std::basic_ios<CharT,Traits>::setstate

void setstate( iostate state );

在当前已设置表之外,设置流错误状态标志 state 。实质上调用 clear(rdstate() | state) 。可能抛出异常。

参数

state-要设置的流错误状态标志。能为下列常量的组合:
常量解释
goodbit无错误
badbit不可恢复的流错误
failbit输入/输出操作失败(格式化或提取错误)
eofbit关联的输出序列已抵达文件尾

返回值

(无)

调用示例

#include <iostream>
#include <sstream>

int main()
{
    std::ostringstream stream;

    if (!stream.fail())
    {
        std::cout << "stream is not fail\n";
    }

    stream.setstate(std::ios_base::failbit);

    if (stream.fail())
    {
        std::cout << "now stream is fail\n";
    }

    if (!stream.good())
    {
        std::cout << "and stream is not good\n";
    }
}

修改状态标志

std::basic_ios<CharT,Traits>::clear

void clear( std::ios_base::iostate state = std::ios_base::goodbit );

通过以 state 的值赋值,设置流错误状态标志。默认赋值 std::ios_base::goodbit ,它拥有的效果为清除所有错误状态标志。

若 rdbuf() 为空指针(即无关联的流缓冲),则赋值 state | badbit 。可能抛出异常。

参数

state-新的错误状态标志设置。它能为下列常量的组合:
常量解释
goodbit无错误
badbit不可恢复的流错误
failbit输入/输出操作失败(格式化或提取错误)
eofbit关联的输出序列已抵达文件尾

返回值

(无)

调用示例

#include <iostream>
#include <string>

int main()
{
    double n;
    while (std::cout << "Please, enter a number\n"
            && !(std::cin >> n))
    {
        std::cin.clear();
        std::string line;
        std::getline(std::cin, line);
        std::cout << "I am sorry, but '" << line << "' is not a number\n";
    }
    std::cout << "Thank you for entering the number " << n << '\n';
}

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

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

相关文章

2013年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

2013考研英语&#xff08;二&#xff09;真题 Section I Use of English Directions: Read the following text. Choose the best word(s) for each numbered blank and mark A, B, C or D on ANSWER SHEET 1. (10 points) Given the advantages of electronic money, you mi…

某农业大学数据结构A-第2周作业

1.两个顺序表集合的差集 【问题描述】两个顺序表集合的差集 【样例输入】 25 33 57 60 48 9 13 0 12 50 23 60 4 34 25 13 0 【样例输出】 33 57 48 9 【注意】0代表输入的结束&#xff1b;可以用C风格实现&#xff0c;也可以用C风格实现&#xff0c;两种风格大家均需掌握 #…

Kafka架构

5.kafka系统的架构 5.1主题topic和分区partition topic Kafka中存储数据的逻辑分类&#xff1b;你可以理解为数据库中“表”的概念&#xff1b; 比如&#xff0c;将app端日志、微信小程序端日志、业务库订单表数据分别放入不同的topic partition分区&#xff08;提升kafka吞…

【Proteus仿真】常用器件名称

前言 我常用的仿真器件加上收集的&#xff0c;基于Proteus8.13版本。以下分为两部分&#xff0c;内容都一样&#xff0c;一部分是纯文字&#xff0c;一部分是文字图片&#xff0c;方便快速获取和定位。等积累了更多的器件后会在更新的。搜索时可以用CtrlF快速查找。 命名的规则…

管理类联考——英语二——技巧篇——写作——B节——议论文——必备替换句型

议论文必备替换句型 (一&#xff09;表示很明显/众所周知的句型 It is obvious thatIt is clear thatIt is apparent thatIt is evident thatlt is self-evident thatIt is manifest thatIt is well-knownIt is known to all thatIt is widely-accepted thatIt is crystal-cl…

三层交换机互联互通配置 华为交换机

#三层交换机互联互通 交换机配置 命令 #进入系统视图 <Huawei>system-view #关闭系统提示信息 [Huawei]undo info-center enable #创建三个Vlan10 [Huawei]vlan 10 [Huawei-vlan10]quit [Huawei]vlan 20 [Huawei-vlan20]quit [Huawei]vlan 30 [Huawei-vlan30]quit #接…

2023六月第二周(juc知识点记录)

1、多线程资源竞争 先创建资源类&#xff0c;并给线程加锁&#xff0c;推荐使用reatrantlock&#xff0c;然后写业务&#xff0c; 加锁了说明肯定要有执行条件&#xff0c;例如抢到锁还要判断库存必须大于0&#xff0c; 否则线程等待await,然后执行业务&#xff0c;最后创建多个…

一分钟图情论文:《运用服务场景模型理解挪威学术图书馆中的学生体验》

一分钟图情论文&#xff1a;《Applying the servicescape model to understand student experiences of a Norwegian academic library》 1981年&#xff0c;Booms, B. H.和Bitner, M. J.1在一篇市场营销学科的论文中引入了Servicescape模型&#xff0c;用于描述和分析服务场所…

无线供电原理、种类及应用方案介绍

目录 一、无线供电种类 二、无线供电的原理 磁共振技术的电路组成 微波能量传输 三、无线供电的优势 四、市场应用 五、市场趋势 参考文献 一、无线供电种类 包含电磁场耦合能量传输&#xff08;电磁磁感应&#xff08;近场供电&#xff09;、磁共振&#xff08;远场供…

easyX库颜色模型和颜色及样式设置相关函数(注释版)

0.颜色模型和颜色及样式设置相关函数概览 本次我给你带了easyX库系列的颜色模型和样式设置的相关函数&#xff0c;希望您能看得开心。 函数或数据类型描述LINESTYLE画线样式对象。FILLSTYLE填充样式对象。setbkcolor设置当前设备绘图背景色。setlinecolor设置当前设备画线颜色…

[易语言][原创]使用易语言部署yolov8的onnx模型

易语言部署yolo系列模型&#xff0c;现在网上有很多但是他们不够简洁也不够专业&#xff0c;有人专门把opencv封装成易语言支持库然后用opencv在易语言端写&#xff0c;其实这种效率没有在C直接推理效率高&#xff0c;因为易语言往C传递图像数据集是需要转换图像数据集格式才能…

十一、docker学习-docker核心之docker网络(1)

docker网络 当开始大规模使用docker时&#xff0c;你会发现需要了解很多关于网络的知识。docker作为目前最火的轻量级容器技术&#xff0c;有很多令人称道的功能&#xff0c;如docker的镜像管理。然而&#xff0c;docker同样有着很多不完善的地方&#xff0c;网络方面就是Dock…

Nexus搭建Maven私有库介绍

为什么需要Maven私有库&#xff1f; 使用Maven获取Java依赖包的时候&#xff0c; 默认是从Maven的中央库下载 jar文件&#xff0c; 中央库的地址是&#xff1a; https://repo.maven.apache.org/maven2 。 如果下载速度慢&#xff0c; 可以使用阿里的镜像&#xff0c; 地址如下…

[元带你学: eMMC协议详解 16] eMMC 安全方案 之 设备锁定(Lock) / 解锁(Unlock) 详解

依JEDEC eMMC 5.1及经验辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 所在专栏 《元带你学: eMMC协议详解》 内容摘要 全文 4100 字&#xff0c; 内容摘要 1. 锁定与解锁的概念&#xff1f; 2. 设置密码的方法和注意点&#xff1f; 3. 重置密码的方法和注意点&…

(Linux) WSL 适用于Linux的Windows子系统

文章目录 前言环境设置开发者选项启用或关闭Windows功能进入Microsoft应用商场下载下载完成开启PS: 查看运行效果 Linux基础配置环境缺失注册账号设置root账户密码常用环境的安装 VS Code 连接插件连接的快捷方式 END 前言 学习Linux的阻碍&#xff0c;往往第一步就是没有Linu…

Java实现图片的上传和显示

⭐简单说两句⭐ 作者&#xff1a;后端小知识 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 文章目录 &#x1f388;前言&#x1f384;前端&#xff1a;&#x1…

ESP32网络应用 -- ESP32-S3使用HTTP协议获取城市天气数据

超文本传输协议(Hypertext Transfer Protocol,HTTP),是一种建立在TCP协议之上,应用非常广泛的请求-响应协议,关于HTTP协议的详细描述,网上已经不乏文章,此处不再详细论述。 作为一款网络功能强大Wi-Fi SOC芯片,ESP32-S3可以通过ESP-IDF编程框架提供的应用程序接口,方…

腾讯云3年轻量应用服务器入口(不要一年的坑)

腾讯云轻量应用服务器2核2G4M和2核4G5M可以一次性选三年&#xff0c;3年轻量2核2G4M带宽396元三年、3年轻量2核4G5M服务器628元三年&#xff0c;轻量应用服务器第二年xufei贵&#xff0c;大家都知道&#xff0c;所以一次性选三年&#xff0c;毕竟限制条件是腾讯云新用户&#x…

8年测试超强整理,性能测试-压力测试-负载测试,卷起来...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 软件测试包括不同…

软件测试第一次做项目之银行项目【操作细节总结】

在我们的日常在金融或银行软件测试工作中都有哪些内容需要测试&#xff1f;在这些测试的内容中如何去更好的掌握测试技能保证测试质量&#xff0c;一起来学习探讨交流。 下面为银行测试点的概括&#xff1a; 根据上图&#xff0c;我们可以从以下几个方面重点关注&#xff1a; …