欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++ Special:const关键字和常量指针 vs 指针常量

程序员文章站 2022-04-23 17:21:23
1、修饰primitive 变量,必须在定义的时候赋值。除了一个特殊情况: 将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译...

1、修饰primitive 变量,必须在定义的时候赋值。除了一个特殊情况:

将const改为外部连接,作用于扩大至全局,编译时会分配内存,并且可以不进行初始化,仅仅作为声明,编译器认为在程序其他地方进行了定义.


extend const int ValueName = value;

2、修饰指针

用一个很好的判断方法:如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。

3、修饰类成员、类方法和类对象(指针、引用)

const修饰类的成员函数,表示成员常量,不能被修改,同时它只能在构造方法的初始化列表中赋值。

const修饰类的成员函数,则该成员函数不能修改类中任何非const成员函数。一般写在函数的最后来修饰。对于const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。

const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。const修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数会有修改成员变量的企图。

4、修饰函数的参数

a.传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)


void function(const int Var);


b.参数指针所指内容为常量不可变


void function(const char* Var);


c.参数指针本身为常量不可变(也无意义,因为char* Var也是形参)


void function(char* const Var);


d.参数为引用,为了增加效率同时防止修改。修饰引用参数时:


void function(const Class& Var); //引用参数在函数内不可以改变


void function(const TYPE& Var); //引用参数在函数内为常量不可变


这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,他禁止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效.另外只有引用的const传递可以传递一个临时对象,因为临时对象都是const属性, 且是不可见的,他短时间存在一个局部域中,所以不能使用指针,只有引用的const传递能够捕捉到这个家伙.