最近发现自己对const
这一块其实不甚熟悉,所以复习一下const
的相关知识点。
基本用法
const int bufSize = 512;
上面这样就可以将bufSize
定义为常量,编译的时候编译器会把用到该变量的地方都替换成对应的值。在代码运行过程中无法为常量另外赋值:
bufSize = 1024;
注意,一定要给定一个值来初始化常量,初始值可以是表达式:
const int j = get_size();
const
只限定不能执行会更改到内容的操作,其他的操作例如将const
变量的值复制给另一个变量是可以的。
int i;
i = bufSize;
作用范围
定义好的const
变量只有在当前文件下才能被访问到,所以在多个文件中定义了同名的const
变量的时候其实就等同于在不同文件中分别定义了独立的变量。如果想要在不同文件中共享一个初始值不是常量表达式的常量,那么就要在定义以及其他文件的声明中加上extern
:
// file1.cpp
extern const int bufSize = fcn();
// file2.cpp
extern const int bufSize;
左定值,右定向
const int *p = 8;
上面这样写就是让const
修饰指针指向的内容,内容必须是常量。
int a = 8;
int* const p = &a;
*p = 9; // 可以更改指向对象的值
int b = 7;
p = &b; // 不能够更改指向方向
上面这样则是指针为常量,但是指针指向的内容可以变。其实const
只是限定了权限,只限定自己修饰的那部分不能够被改变值。
还有同时修饰指针和指针指向的内容的情况:
int a = 8;
const int *const p = &a;
修饰成员函数
#include<iostream>
using namespace std;
class Test
{
public:
Test(){}
Test(int _m):_cm(_m){}
int get_cm()const
{
return _cm;
}
private:
int _cm;
};
void Cmf(const Test& _tt)
{
cout<<_tt.get_cm();
}
int main(void)
{
Test t(8);
Cmf(t);
system("pause");
return 0;
}
这样写get_cm
就不允许修改成员变量。
参考
《C++ Primer 第5版》:看就是了,别废话
C++ const 关键字小结