cout 杂记

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刷新缓冲区,并插入一个换行符。

 

 

你可能感兴趣的:(c,basic,终端)