g++ -std=c++14 -Wall -o test test.cpp
iostream
cin
cout
cerr
clog
<<
运算符返回其左侧的运算对象- 写入
endl
的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入到输出流中,而不是仅停留在内存中等待写入流 - 小心程序崩溃,输出可能还留在缓冲区的情况,利用
endl
- 标准库定义的所有名字都在命名空间
std
中 - 当我们使用一个
istream
对象作为条件时,其效果是检测流的状态。流有效,即流未遇到错误,那么检测成功。当遇到文件结束符(end of file),或遇到一个无效输入时,istream
对象的状态会变为无效。无效的istream
对象会使条件为假 - 文件结束符:Windows 先Ctrl + Z,后Enter 或 Return;UNIX:Ctrl +D
- 标准库文件通常不带后缀。编译器一般不关心头文件名的形式,但有的IDE对此有特定要求
- 头文件包含:标准库头文件 <> 非标准库头文件 ""
- 文件重定向:从文件读入\<infile,输出到文件>outfile
cerr
(无缓冲标准错误) 没有缓冲,发送给它的内容立即被输出clog
(缓冲标准错误) 有缓冲,缓冲区满时输出cout
标准输出cout
是在终端显示器输出,cout
流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout
流插入一个endl
,不论缓冲区是否满了,都立即输出流中所有数据,然后插入一个换行符cerr
流对象是标准错误流,指定为和显示器关联,和cout
作用差不多,有点不同就是cout
通常是传到显示器输出,但可以被重定向输出到文件,而cerr
流中的信息只能在显示器输出clog
流也是标准错误流,作用和cerr
一样,区别在于cerr
不经过缓冲区,直接向显示器输出信息,而clog
中的信息存放在缓冲区,缓冲区满或者遇到endl
时才输出- 对于为什么有
cerr
和clog
?比如,你的程序遇到调用栈用完了的威胁(无限,没有出口的递归。你说,你到什么地方借内存,存放你的错误信息?所以有了cerr
。其目的,就是在你最需要它的紧急情况下,还能得到输出功能的支持 - 缓冲区的目的,就是减少刷屏的次数——比如,你的程序输出圣经中的一篇文章。不带缓冲的话,就会每写一个字母,就输出一个字母,然后刷屏。有了缓冲,你将看到若干句子“同时”就出现在了屏幕上(由内存翻新到显存,然后刷新屏幕)