std :: cout可以使用运算符&lt; <! - 设置badbit或failbit吗?如果是这样,何时? - >

时间:2014-10-07 17:59:02

标签: c++ c++11

std::cout可以使用运营商badbit设置failbit<<。如果是这样,这是什么时候发生的?

2 个答案:

答案 0 :(得分:4)

std::cout映射到较低级别的操作系统设施,任何可能导致操作系统失败的内容都将显示为failbitbadbit。例如,在Linux上,您可以通过关闭stdout来实现此目的:

int main(int argc, char* argv[])
{
  close(1);
  std::cout << "Hello, world!" << std::endl;
  return cout.fail(); // returns 1
}

(并且,因为文件描述符是继承的,所以您的调用进程可能已经为您关闭了stdout。)

答案 1 :(得分:3)

  

std::cout可以使用运营商badbit设置failbit<<。如果是这样,这是什么时候发生的?

总的来说(仅限于std::cout),这些是输出操作可能失败的原因(as from the cppreference.com):

  

badbit由以下标准库函数设置:

     
      
  • basic_ostream::put如果无法在输出中插入字符   流,出于任何原因。
  •   
  • basic_ostream::write如果无法插入   出于任何原因,字符进入输出流。
  •   
  • 格式化输出   函数operator<<std::put_moneystd::put_time,如果它们   在完成输出之前遇到输出流的结尾。
  •   
     

.....

     

failbit由以下标准库函数设置:

     
      
  • basic_ostream::tellp失败
  •   
  • 。的构造者   std::basic_fstreamstd::basic_ifstreamstd::basic_ofstream   如果无法打开文件,则采用文件名参数。
  •   
  • basic_fstream::openbasic_ifstream::openbasic_ofstream::open   如果文件无法打开。
  •   
  • basic_fstream::close,   如果文件不能,则basic_ifstream::closebasic_ofstream::close   被关闭。
  •