C++随笔(0)——关于const

最近发现自己对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 关键字小结

posted @ 2019-11-15 20:16  夜溅樱  阅读(160)  评论(0编辑  收藏  举报