inrcl
inrcl
[C/C++]学习笔记-01

函数中的每条return语句都被用来明确表示该处就是函数的退出点。如果函数体的最后一条语句不是return,那么最后一条语句之后便是该函数的隐式退出点。

当函数的返回值类型被定义为void时,return语句不返回任何数值,它被用来提前结束函数的执行。

函数调用时,参数传递可以有两种,传值(by value)和传址(by reference)。

//初始化vector容器
int ia[5] = {8,34,3,13,1};
vector<int> vec(ia,ia+5);

当我们把值对象传入函数,默认情形下其值会被复制一份,成为参数的局部性定义(local definition)。
使用传入地址就可以令参数和传入的实际对象产生关联。要达到这个目的,最简单的做法便是将参数声明为一个reference。

int ival = 1024;   //对象,类型为int
int *pi = &ival;  //pointer(指针),指向一个int对象
int &rval = ivsl;  //reference(引用),代表一个int对象

//将ival(此为ravl所代表着的对象)的地址赋值给pi。并不是让pi指向ravl。
pi = &rval;

当我们以by reference 方式将对象作为函数参数传入时,对象本身并不会复制出另一份——复制的是对象的地址。函数中对该对象进行的任何操作,都相当于是对传入的对象进行间接操作。
将函数声明为reference还可以降低复制大型对象的额外负担。

void display(const vector<int> &vec);

少了const并不会造成错误。但加上const可以让阅读程序的人了解,我们以传址的方式来传递vector,为的是避免复制操作,而不是为了要在函数之中对它进行修改。

pointer参数和reference参数之间更重要的差异是,pointer可能(也可能不)指向某个实际的对象。当我们提领(解引)pointer时,一定要先确定其值并非0。至于reference,则必定会代表某个对象,所以不需要做此检查。

为对象分配的内存,其存活时间称为储存期(storage duration)或范围(extent)。
对象在程序内的存活区域称为该对象的scope(作用域)。函数内的对象具有local scope(局部作用域),其名称在local scope之外便不可见。

anyShare分享到:

发表评论

textsms
account_circle
email

inrcl

[C/C++]学习笔记-01
pointer参数和reference参数之间更重要的差异是,pointer可能(也可能不)指向某个实际的对象。reference,则必定会代表某个对象
扫描二维码继续阅读
2019-11-15