C++ const关键字

Const关键字:
1、const意味着“只读”;
2、Const指定一个变量不被修改,在C++中定义const变量时,必须先初始化;
3、对指针而言:
常量指针:const int *p;//p(指针指向的内容)不可变,但p(指针)可变(常量指针必须初始化)
指针常量:int * const p;//指针P不能被重新赋值 而
p(即指针指向的内容)可变
4、默认情况下,const对象被设定为仅在文件内有效;如果想在多个文件之间共享const对象,必须在变量的定义前添加extern关键字(extern关键字意思是此变量(函数)在别处被定义,在此处使用);
5、类中使用const
const修饰成员变量
表示成员变量不能被修改,同时只能在初始化列表中赋值
const修饰成员函数
该函数不能改变对象的成员变量
不能调用非const成员函数,因为任何非const成员函数会有修改成员变量的企图
const的成员函数只能被一个const类对象调用。即const类对象只能调用const成员函数
const关键字不能与static关键字同时使用,因为static关键字修饰静态成员函数,静态成员函数不含有this指针,即不能实例化,const成员函数必须具体到某一实例。
6、const修饰类对象
对象的任何成员都不能被修改
只能调用const成员函数
7、const引用传递和函数按值传递的效果是一样的,但按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效;const按值传递时只是外部对象的拷贝,值的改变不会对外部有什么影响,那么是不是没有什么意义:错,重要的目的就是告诉说这个变量不允许被修改,传引用效率会高一点而已。
8、 当一个常量引用被绑定到另一种类型上发生什么(C++primer P55)
Int i = 0;
int &r1 = i; r1 = 5;//允许 可以通过r1 修改i的值
Const &r2 = i; r2 = 4;//错误 不允许通过r2修改i的值
9、指向常量的指针:const int *p;

# include <iostream>
using namespace std;

int main(){
	int a = 10;
	const int *p = &a;
	int b = 50;
	a = b;
			  //指向常量的指针所指的对象不一定是一个常量  也可以是非常量
	//*p = 20;//错误  指向常量的指针只是不能通过该指针修改对象的值
			  //并不是该对象的值不能通过其他途径被修改
	cout << "a = " << a << endl;
	cout << "*p = " << *p <<endl;
	
	system("pause");
	return 0;
}



10、顶层const:指针本身是常量
	底层const:指针所指向对象是常量  用于声明引用的const都是底层const(const int &r = i;)
11、	常量表达式:值不会改变并且在编译过程中就得到结果的表达式
	声明为constexper类型的变量一定是个常量,且必须用常量表达式赋值
	指针和引用都能定义成Constexper类型,但是constexper型指针初始值必须是nullptr或者0,或者是存储于某个固定地址中的对象;
	函数体内的变量一般并非存放在固定地址中,constexper指针不能指向这样的地址。定义于函数体外的的对象地址固定不变。
	constexper指针是一个顶层const。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值