C++小结

作者: 低调的风 | 来源:发表于2019-12-02 17:47 被阅读0次

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解读

相关文章

  • extern "C"的小结 来自《程序员的自

    extern "C"的小结 来自《程序员的自我修养》 C++为了与C兼容,C++可以使用关键字extern "C"...

  • c++小结

    大小写敏感。 我们在指定某个上限常数的时候,可以命名为MAX,在需要一个临时的代表最大值的变量的时候,我们也可以使...

  • C++小结

    1.区分栈和堆存储形式 栈: (1)既可存储基本数据类型 (如int、double等),又可存储对象(如class...

  • C++语言-this关键字、友元函数友元类、操作符重载

    1、C++中的可变参数 2、C++ static关键字 static关键小结:1、绝大多数和Java一样,静态的函...

  • C++发展小结

    姓名:于川皓 学号:16140210089 转载自:https://www.zhihu.com/people/zh...

  • C++模板小结

    C++中突出的特性之一就是代码重用,而模板在其中发挥了重要的作用,STL也是依托于C++模板而实现的最为广泛和有用...

  • 浅谈C++常用输入输出

    浅谈C++常用输入输出 在编写C++程序的时候,经常因为输入输出头疼,所以在这里做一个小结,记录一下常用的输入输出...

  • swift小结 1

    swift小结 1 变量命名规则及值类型说明 C/C++: 字母、数字、下划线 必须以字母、下划线开头 不能与关键...

  • 几个C++的小结

    "new (p) T()"的用法 从p指向的空间中分配T类型的空间。如: 这样就从p指向的空间中分配出一个char...

  • C++学习小结(一)

    接下来我们讲解一下上面这段程序: 基本的内置类型 C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类...

网友评论

      本文标题:C++小结

      本文链接:https://www.haomeiwen.com/subject/fwefgctx.html