C++小结

1.区分栈和堆存储形式

栈:

(1)既可存储基本数据类型 (如int、double等),又可存储对象(如className A)。

(2)由于栈内存空间有限,如果不及时释放空间,可能会导致栈溢出。

(3)main函数存储于栈内存中,待main函数执行完毕后,将释放main函数有关栈的空间。例如main函数里定义里className A,如果main函数执行完毕后,那么将要调用className 类中的析构函数来释放对象。

堆:

(1)用来存储new对象的。例如className  * C = new className ();

(2)如果对象C不再使用,需要及时释放,否则会导致内存泄漏。释放对象用delete C,释放数组用delete []  C。

2.引用 &

 引用的定义:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

引用的声明方法:类型标识符 &引用名=目标变量名;

【实例解析】:int a;  int &ra=a;  //定义引用ra,它是变量a的引用,即别名

(1)&在此不是求地址运算,而是起标识作用。

(2)类型标识符是指目标变量的类型。

(3)声明引用时,必须同时对其进行初始化。

(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。ra=1; 等价于a=1;

(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。

(6)不能建立数组的引用。因为数组是一个由若干个元素所成的集合,所以无法建立一个数组的别名。

(7)不能建立引用的引用,不能建立指向引用的指针。因为引用不是一种数据类型!!所以没有引用的引用,没有引用的指针。

引用的优点:

(1)在引用的使用中,单纯给某个变量取个别名是毫无意义的,引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问题。

(2)用引用传递函数的参数,能保证参数传递中不产生副本,提高传递的效率,且通过const的使用,保证了引用传递的安全性。

(3)引用与指针的区别是,指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。

(4)使用引用的时机。流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。

详情请见 引用解读

3.指针

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。

要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。

指针中涉及的*号,如果声明时则表示指针(地址),例如int * a; 如果是单独使用,则表示取地址所指向空间的值。

详情请见 指针解读

4.const

基本概念: const名叫常量限定符,用来限定特定变量,以通知编译器该变量是不可修改的。习惯性的使用const,可以避免在函数中对某些不应修改的变量造成可能的改动。

const的用法大致可分为以下几个方面:

(1)const修饰基本数据类型

(2)const应用到函数中

(3)const在类中的用法

(4)const修饰类对象,定义常量对象。

举例:

const修饰指针(*):

const int* a = & [1]          //非常量数据的常量指针    指针常量

int const *a = & [2]          //非常量数据的常量指针     a is a pointer to the constant char variable

int* const a = & [3]          //常量数据的非常量指针指针常量 常量指针 a is a constant pointer to the (non-constant) char variable

const int* const a = & [4]    //常量数据的常量指针

可以参考《Effective c++》Item21上的做法,

如果const位于星号*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;

如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。

因此,[1]和[2]的情况相同,都是指针所指向的内容为常量,这种情况下不允许对内容进行更改操作,如不能*a = 3 ;

[3]为指针本身是常量,而指针所指向的内容不是常量,这种情况下不能对指针本身进行更改操作,如a++是错误的;

[4]为指针本身和指向的内容均为常量。   

const修饰引用(&):

   int const &a=x;  const int &a=x;

   int &const a=x;//这种方式定义是C、C++编译器未定义,虽然不会报错,但是该句效果和int &a一样。   

这两种定义方式是等价的,此时的引用a不能被更新。如:a++ 这是错误的。 


详情请见 const解读

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容