std::cout
可以使用运营商badbit
设置failbit
或<<
。如果是这样,这是什么时候发生的?
答案 0 :(得分:4)
std::cout
映射到较低级别的操作系统设施,任何可能导致操作系统失败的内容都将显示为failbit
或badbit
。例如,在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_money
和std::put_time
,如果它们 在完成输出之前遇到输出流的结尾。.....
failbit由以下标准库函数设置:
basic_ostream::tellp
失败- 。的构造者
std::basic_fstream
,std::basic_ifstream
和std::basic_ofstream
如果无法打开文件,则采用文件名参数。basic_fstream::open
,basic_ifstream::open
和basic_ofstream::open
如果文件无法打开。basic_fstream::close
, 如果文件不能,则basic_ifstream::close
和basic_ofstream::close
被关闭。