面试总结之C++中const用法

1、const用法及作用

1.1、const与指针

const放在类型前面表示指针指向的是一个常量,放在*后面表示这是一个常量指针。

const int* p;//p指向的是一个常量
int* const p;//p是一个常量指针,不是修改它的值
1.2、const修饰函数参数

const修改函数参数表示参数不可修改,可起到保护的作用。

void foo(const int a)
{
a=10;//error
}
1.3、const修改成员函数

const修改成员表示该函数不能修改任何成员变量的值,同时不能调用任何非const修饰的函数,因为没有const修饰的函数会修改成员变量的值。const修饰函数放在最后面。

class demo
{
private:
int a;
pulibc:
void foo() const
{
a=10;//error
}
};
1.4、const修饰函数返回值

const修饰函数返回值有三种情况:

第一种,函数返回指向常量的指针变量,即const int*,这种情况接收返回值的也必须是指向常量的指针,指针变量或指针常量都可以(变量可以赋给变量,也可以赋给常量)。

第二种,函数返回指向变量的常量指针,即int* const,这种情况接收返回值的可以是变量指针,也可以是常量指针(常量赋给变量,也可以赋给常量)。指针指向变量或常量都可以(指向变量的指针也可以赋给指向常量的指针)。

第三种,函数返回指向常量的常量指针,即const int* const,这种情况和第一种情况一样,接收返回值的必须是指向常量的指针,可以是常量指针也可以是变量指针。(常量可以赋给变量,也可以赋给常量)。
第四种,函数返回常量,即const int。这种写上const没什么意义,因为值传递都是复制的。

前面三种看起来有点绕,总结起来就是两句话:

一、常量可以赋给常量和变量。

二、指向常量的指针必须必须赋给指向常量的指针,指向变量的指针可以赋给指向变量或常量的指针。

const char* foo()
{
	const char a = 'c';
	const char* p = &a;
	return p;
}

char* const foo2()
{
	char a = 'c';
	char* const p = &a;
	return p;
}

const char* const foo3()
{
	const char a = 'c';
	const char* const p = &a;
	return p;
}

int main()
{
	//char* p = foo();	//error,指向常量的指针不能赋给指向变量的指针
	const char* p = foo();	//指向常量的指针
	const char* const p4 = foo();	//把变量指针赋给常量指针,合法

	char* p2 = foo2();	//把常量指针赋给变量指针,合法
	char* const p3 = foo2();	//常量指针
	const char* p5 = foo2();	//指向变量的指针可以赋给指向常量的指针

	const char* const p6 = foo3();	//指向常量的常量指针
	const char* p7 = foo3();		//指向常量的变量指针
	//char* const p8 = foo3();		//指向变量的常量指针,error
	//char* p9 = foo3();				//指向变量的变量指针,error

	cin.get();
	return 0;
}
1.5、const之于函数的健壮性

一、修饰函数参数

按值传递的参数加上const是没意义的,因为参数传递的时候是拷贝的。按引用传递时加上const保证传出参数的同时对象也不会被更改。

二、修饰函数返回值

返回指向常量的指针只能用指向常量的指针接收,避免指针指向的对象被更改。

三、修饰成员函数

保护成员变量不被修改。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值