C++学习——const关键字

本节总结与const关键字相关的C++学习知识及面试题,一起来看看吧~

static关键字C++学习——static关键字-CSDN博客

new、delete关键字C++学习——new delete关键字-CSDN博客

其它关键字C++学习——sizeof、ertern、volatile等其它关键字-CSDN博客

一、const关键字

在标准C++中,const定义的是一个常量,用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。

二、const关键字的作用

1定义一个只读变常量或常对象被const修饰会受到强制保护,定义时通常需要进行初始化。

        C语言:const修饰是只读变量本质还是变量

        C++语言:const修饰的是真正意义上的常量,值在编译期就已经确定

(2)修饰函数的返回值和形参;

在一个函数声明中,const可以修饰形参,在函数内部不能改变其值。

对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量,类的常对象只能访问类的常成员函数,且有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。

三、注意事项

1、const类型可以通过类型转换符const_cast转换为非const类型。

2、对于函数值传递的情况,由于参数传递是通过拷贝实参创建一个临时变量传递进函数的,函数内只会改变临时变量,但无法改变实参,此时无论加不加const对实参不会产生任何影响

引用或指针传递函数调用中,函数内部可以改变引用或指针所指向的变量,这时const 才是实实在在地保护了实参变量。

四、指针与const

常量指针是指定义了一个指针,这个指针指向一个只读的对象,不能通过常量指针来改变这个对象的值。常量指针强调的是指针对其所指对象的不可改变性

指针常量是指定义了一个指针,这个指针的值只能在定义时初始化,其他地方不能改变。指针常量强调的是指针的不可改变性

五、const和#define的异同

同:const和#define都可以定义常量

 C中是使用宏#define定义, C++使用const来定义。

异:

1const 常量有数据类型,在编译、链接过程中起作用只有一个拷贝,编译器可以对其进行类型安全检查;

#define定义的宏常量没有数据类型,在预处理阶段起作用,进行字符替换,替换可能会产生意料不到的错误。可能有多个拷贝,没有类型安全检查

有些集成化的调试工具可以对 const 常量进行调试,但是不能对宏常量进行调试。

(2)#define预处理后占用代码段空间,const占用数据段空间

(3)const不能重定义,而#define可以通过#undef取消某个符号的定义,进行重定义;

(4)#define独特功能可以用来防止文件重复引用。

(5)#define定义的常量是不可以用指针去指向,const定义的常量可以用指针去指向该常量的地址

(6)#define可以定义简单的函数,const不可以定义函数

六、C中const 能定义真正意义上的常量吗?

答:不能。

C中const并非是真正的常量,它仅仅是从编译层限定不允许对const变量进行赋值操作,可以通过指针对const变量进行修改。

注:c语言中只有enum可以实现真正的常量。

C++编译时会把const常量加入符号表,遇到变量会从符号表中查找,所以在C++中是不可能修改到const变量的。 

const成员变量只能在初始化列表中进行初始化。

感谢~

  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值