C++ const总结

参考了一下另一篇博客

  • const声明的全局变量默认为该文件的局部变量仅限该文件使用,除非显式声明为extern const int a = 1;
  • const引用
 int p = 42;
 const int& q = p;
 const int& x = 42;//不会报错
 //而int & x = 42;会报错
 /*const int p = 42; int &x = p;会报错,因为不能忽略限定符const给使用者造成错觉*/
 /*const引用不能够修改内部地址的值*/
const double& w = p;/*必须加上const才不会报错,引用存储的会是类型转换后的临时变量*/
  • const指针
const string* array = new string[100];
/*声明类的这种数组必须保证有默认构造参数,且声明之后就不能修改这个数组里的各个元素的值了*/
const int a = 4;
const int* p = &a;/*必须声明为const指针,保证不能通过指针修改常量值*/
int b = 2;
const int* p2 = &b;/*这样也可以,但是不能通过p2来改b的值了*/
int* const p3 = &b;/*这样代表的是这个指针指向的地址是固定的,可以修改存储的值,也就是*p3 = 3;合法,而p3 = &a;是不合法的*/
/*不能使用void*指针保存const对象的地址,必须使用const void*类型的指针保存const对象的地址。*/
  • 在类中const成员函数
/*在一个类中,任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。使用const关键字进行说明的成员函数,称为常成员函数。只有常成员函数才有资格操作常量或常对象,没有使用const关键字说明的成员函数不能用来操作常对象。常成员函数说明格式如下:*/
int get_v() const;
/*既然const是定义为const函数的组成部分,那么就可以通过添加const实现函数重载咯。*/
/*const对象默认调用const成员函数。*/
  • const 修饰函数返回值
    规则和之前的const int* /int* const等规则相同
  • const修饰函数参数
    参数指针所指内容为常量不可变
    在这里插入图片描述
  • 参数引用为常量不可变

在这里插入图片描述

  • const数据成员
class test_const {
	const int a;
	const static int c;
	static int d;
	int b;
public:
	test_const(int x,int y):a(x+y),b(1) {/*非静态常量必须在构造函数初始化列表声明*/
		b = 2;
	}
	void addAndOut(int val) {
		d += val;
		cout << d << endl;
	}
};
/*在使用的地方的全局作用域声明静态变量*/
const int test_const::c = 1;/*必须完全const限定符匹配,所以不能去掉const*/
int test_const::d = 1;/*这里也不能加上const*/

我虽然看懂了,但我仍然大受震撼,小小一个限定符,搭配上指针、引用、类、函数、参数、返回值等出现这么多变种!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值