C++ 常见知识点总结

1、const关键字

const的作用:

1、定义只读变量,即常量。

2、修饰函数的参数及返回值。

3、修饰函数的定义体,这里的函数为类的成员函数,被const修饰的成员函数代表不修改成员变量的值。非常量成员函数不能被常量成员对象调用,因为它可能企图修改常量的数据成员。非常量成员函数不能被常量实例调用,因为它可能企图修改常量的数据成员。

const的总结:

1、const对象必须初始化,一旦创建,不能改变。

2、const对象默认作用域为文件作用域,二普通变量默认作用域为整个程序。举例:在一个工程中有1个header.h头文件定义了int a = 1,两个工程文件1.cpp和2.cpp包含了header.h,会产生错误。普通变量作用域是整个程序,相当于a变量被重复定义了两次。但是如果 int a = 1 改为 const int a = 1 则不会报错,因为const对象默认文件作用域,所以可以利用在头文件中定义一个const变量实现多个工程文件重复使用相同变量。(如果想使用其它工程文件中的const对象,应当在const对象定义时使用extern const int a = 1; 在需要使用时对这个对象进行声明:extern const int a;

3、顶层const与底层const:对象本身为const,说明该对象为顶层const;对象指向或引用的是const对象,说明这是底层const。执行对象拷贝时有限制,常量的底层const不能赋值给非常量的底层const。使用命名的强制类型转换函数const_cast时,需要能够分辨底层const和顶层const,因为const_cast只能改变运算对象的底层const。

const引用的一些规律

引用前带const修饰符 被引用前带const修饰符 附注
对const变量的const引用
引用认为它引用的变量不可以改变
在下面的代码中有例子(最后一行)
就是普通的引用

const与指针

指针 被指数据 附注
变量 变量 普通的指针
变量 常量 不可以
常量 变量 可以。常量指针“自以为是”,认为自己指向了常量,所以自觉的不去改变所指对象的值。实际上,这个值是可以改变的
常量 常量 定义一个常量指针指向一个常量对象。

以下是const的声明例子,具体是什么意义已经在注释中写明。

const int a;          //定义一个常量a
int const a;          //同上
const int *a;         //定义一个指向整型常量的指针a
int * const a;        //定义一个指向整型变量的常指针
int const * a const;  //定义一个指向整型常量的常指针

int &b = a;           //企图让一个非常量引用指向一个常量对象。如果该初始化合法,则a的值可改变,这显然不正确。

2、static关键字

作用:

1、隐藏;

上面的static关键字中提到,普通变量的作用域为整个程序,具有全局可见性。在加上static关键字之后,就会对其他源文件不可见,即隐藏,将作用域限定为文件作用域。

2、默认初始化为0;

在静态数据区,内存中所有的字节默认值都是0x00,全局变量也具备这一属性。由于static关键字修饰的变量存放在静态数据区,所以static对象具有持久性和默认值为0两个特性。

3、持久化;

存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以限制变量的可见范围。

在成员变量中声明static时,必须对它进行初始化,否则报错,且不能将静态成员函数定义为虚函数。

3、C++中&的含义

通常来说,C++中&的作用主要是引用与取地址,可用概括为:在等号左边位引用,在等号右边为取地址。

取地址可概括为根据指向变量的指针寻找存储变量的内存,并读取。一旦引用了一个对象之后,不管是修改引用的对象或者被引用的对象两者都会改变。

int a = 1;
int &b = a;   //引用
int *p = &a;  //取地址

 

 

猜你喜欢

转载自blog.csdn.net/weixin_39738307/article/details/82025752