定义于头文件

template<     class CharT,     class Traits = std::char_traits > class basic_ios : public std::ios_base

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

继承图

 

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

类型定义iosbasic_ioswiosbasic_ios

状态函数

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

std::basic_ios::good

bool good() const;

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

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

参数

(无)

返回值

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

检查是否到达了文件末尾

std::basic_ios::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::fail

bool fail() const;

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

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

参数

(无)

返回值=

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

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

std::basic_ios::bad

bool bad() const;

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

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

参数

(无)

返回值

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

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

std::basic_ios::operator!

bool operator!() const;

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

参数

(无)

返回值

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

调用示例 

#include

#include

#include

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::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

#include

int main()

{

std::istringstream s("1 2 3 error");

int n;

std::cout << std::boolalpha << "s is " << static_cast(s) << '\n';

while (s >> n)

{

std::cout << n << '\n';

}

std::cout << "s is " << static_cast(s) << '\n';

}

返回状态标志

std::basic_ios::rdstate

iostate rdstate() const;

返回当前错误状态。

参数

(无)

返回值

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

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

调用示例

#include

#include

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::setstate

void setstate( iostate state );

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

参数

state-要设置的流错误状态标志。能为下列常量的组合:

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

返回值

(无)

调用示例

#include

#include

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::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

#include

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';

}

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: