核心简记
IO类
头文件iostream:
-类型istream,wistream从流读取数据
-类型ostream,wostream向流写入数据
-类型iostream,wiostream读写数据
头文件fstream:
-类型ifstream,wifstream从文件读取数据
-类型ofstream,wofstream向文件中写入数据
-类型fstream,wfstream读写数据
头文件sstream:
-类型istringstream,wistringstream从string中读取数据
-类型ostringstream,wostringstream向string中写入数据
-类型stringstream,wstringstream读写数据
- w开头的为宽字符版本,操纵wchar_t类型。
- fstream与stringstream都继承于iostream。
- IO对象不可拷贝与赋值。
IO类共有
条件状态:
第一个是类型,之后四个为常量码,用于判断的。eof、bad都会影响fail。将流当条件等价于!fail()
每个输出流都有缓冲区,为了合成单一的系统调用。缓冲区刷新的原因:
- 程序正常结束
- 缓冲区满时
- 操作符如endl
- unitbuf设置每次刷新
- 读写被关联的流,关联的流将刷新。默认下cin与cerr关联cout
手动刷新:endl-换行后刷新。flush-直接刷新。ends-空格后刷新。
自动刷新:cout<< unitbuf (nounitbuf为复原) 之后自动刷新。
如果程序崩溃,不会刷新。
关联操作:
cin.tie(&关联的目标);
i与o可关联到o,只能关联一个,但可同时关联一个。
文件输入输出
fstream特有:
fstream a:创建一个未绑定的流。
fstream a(s):默认模式创建并打开文件,string与c式数组都可以。自动调用open
fstream a(s,mode):自定义模式
a.open(s) :打开s文件并绑定。可以带mode
a.close() :关闭文件,一个流想绑定另一个文件必须先关闭当前,再open。
a.is_open():判断是否可用
fstream对象销毁时,close会自动调用。一个{}内的对象结束时会自动销毁的。
文件模式:使用直接fstream类名::名就可以,是整数类型,可以|。
in:以读方式打开
out:以写方式打开
app:每次写为文件末尾-out才可
ate:打开后为文件末尾
trunc:截断文件
binary:二进制方式io
ate与binary模式可以用于任何类型文件流。out默认为trunc的(即打开的文件内容丢失)。想保留out的文件要用app
string流
stringstream特有:
stringstream a:创建未绑定的流对象。
stringstream a(s):创建保存s拷贝的流对象。
a.str()返回保存的string对象。
a.str(s)将s拷贝到a中。返回void 这个是覆盖
同样可以加mode
反汇编
|
|
X86-64
指令简记
分析
|
|
寄存器都是被修改前保存的,函数调用并不保存通用寄存器,由调用方保护。返回的临时值也是要析构的(当返回的值不存时)。
对象操作都被编译为函数,如重载的运算符识别为先后传入左this与右this。返回的临时对象地址用di传入,和this冲突的话应该是先传返回地址,因为this算参数之中。
核心还是找this并确定类型。
ARM64
指令简记
分析
|
|
注意返回值临时量不拷贝构造时会立刻析构,因为做为临时量其只用于函数返回,函数调用结束、返回值使用后就不应该存在了,当仅作为临时量时需要立刻析构。