1. c++里关于cerr,clog,cout三者的区别:
cerr(无缓冲标准错误)-----没有缓冲,发送给它的内容立即被输出
clog(缓冲标准错误)--------有缓冲,缓冲区满时输出
cout-------------------------标准输出
三个都是ostream类定义的输出流对象,
cout是在终端显示器输出,cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl,不论缓冲区是否漫了,都立即输出流中所有数据,然后插入一个换行符.
cerr流对象是标准错误流,指定为和显示器关联,和cout作用差不多,有点不同就是cout
通常是传到显示器输出,但可以被重定向输出到文件,而cerr流中的信息只能在显示器输出.
clog流也是标准错误流,作用和cerr一样,区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出.
2.插入操作符(<<)
需要注意的是插入操作符能识别的基本类型并不包括string
string是自身又重载了<<
3.输出和指针
ostream类为下面的指针类型定义了插入操作符函数:
- const signed char*
- const unsigned char *
- const char*
以上三种输出的都是字符串,如果要输出字符串的首地址,必须使用强制类型转化(void *)
- void *
对于其他类型的指针,C++将其对应于void*,并打印地址。
4.put方法和write方法
put()的原型:ostream & put (char), 用于显示字符,可以这样使用cout.put('a').put('b')
write()的模板原型:basic_ostream<charT, traits> & write(const char_type* s, streamsize n);
write()方法也可以用于数值数据,你可以将数字的地址强制转换为char *
long val = 560031841;
cout.write((char *)&val, sizeof(long));
5.flush和endl的区别
flush刷新缓冲区,控制符endl刷新缓冲区,并插入一个换行符。