C\C++ const完全解释

来源:互联网 发布:怒首领蜂 知乎 编辑:程序博客网 时间:2024/05/23 01:12

学C\C++感觉对const的用法一直有些模糊,今天总结一下。应该还是不会很全面,以后慢慢补全吧

这两个关键字主要用途在于以下几个地方:

1、修饰变量

2、修饰指针

3、修饰函数参数

4、修饰函数返回值

5、修饰类的成员变量

6、修饰类的成员函数

7、修饰类的对象


1、修饰变量

用法:const 类型名 变量名 or 类型名 const 变量名

性质:在C语言中,const使用外部连接,定义时必须初始化。C++中,const默认使用内部连接,在不同文件中定义同名的const变量不会引起冲突,定义时必须初始化,编译时不分配内存。若要使用外部连接,要在前面加上extern,编译时会分配内存,并且可以不进行初始化,可以替代C语言的宏定义,但是保证类型安全。


2、修饰指针

用法:

(1)指针指向常量:const Type* p; or Type const* p  (const在*左侧)

(2)指针本身是常量:Type* const p   (const在*右侧)

(3)指针指向常量且本身是常量:const Type* const p

性质同1


3、修饰函数参数

用法:Type Function(const Type var)

性质:传递的参数在函数内不可以被改变。如果传的参数是普通变量无意义,因为传入的是形参。如果传的是指针,则由2确定哪部分不能被改变。如果传的是引用,在传类对象的引用时,可以省去复制临时变量调用构造函数和析构函数的开销并且参数不会被改变。


4、修饰函数返回值

用法:const Type Function(Type var)

性质:函数返回值只能赋值给const变量。注意在运算符重载时(例如operator=)如果给返回的引用前面加上const则无法实现链式赋值。


5、修饰类的成员变量

用法:const Type varName

性质:只能在构造函数的初始化列表中赋值,一旦赋值,不能再被修改。


6、修饰类的成员函数

用法:Type Function(Type var) const

性质:该成员函数不能修改类中非const数据成员,但是如果数据成员是指针,则不能保证不修改指针指向的对象。const成员函数不能调用非const成员函数。const对象只能访问const成员函数。const成员函数可以访问所有成员变量。


7、修饰类的对象

用法:const Type varName

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

0 0
原创粉丝点击