C++ const详解

C++ const详解

被const修饰符所修饰的数据类型其值是不可改变的,从而提高程序的可靠性和安全性。

修饰变量

C++是编译型语言,所以当程序进行编译时,编译器会检查程序是否满足各种约束,const就相当于一个约束,它表明其变量值不能被改变,如果在const变量初始化之后再进行操作,编译器会报错

    const int a = 5;//accept ,进行初始化
    a = 6;//error,不能给常量赋值

根据其这个特性,例如,在项目编写的时候,两个函数需要两个人进行编写,需要传递参数,但是出于安全考虑,并不知道对方是否会改变这些变量,如果不希望这种事情发生,可以使用const引用,既不会重新创建临时变量,而且不用担心其他人改变了你的变量值。

例子

void foo(const int &b) {
    b = 5;//error,无法改变const 变量值
}
int main() {
    int a = 5;
    foo(a);
    system("pause");
    return 0;
}

const修饰指针

修饰指针的时候也是不可变,但是const相对位置会影响所修饰的部分。

例子

    int c = 3;
    const int* a;//const修饰*a,说明a地址中的值是无法改变的
    int* const b = &c;//const修饰b,说明b指针指向的地址是无法改变的
    *a = 5;//accept
    a = &t;//error
    b = &t;//error
    *b = 5;//accept

很多面试题会考应聘者const int* a和int* const a的区别,前者const修饰的是*a,所以*a,后者const修饰的是a,是一个指针,所以指针指向的地址无法改变。

那const int* a和int const *a呢,其实是一样的,都是修饰*a。

死记硬背通常无效,当理解以后忘掉也没有关系,因为再次学习的时候便很快了

类中const使用

当成员变量被const修饰时,不能马上接初始化,只能在构造函数的初始化列表中进行

class A
{
    public:
        A(int size) : SIZE(size) {};
    private:
        const int SIZE;
};

其他需要注意的地方和普通变量一样

当const修饰成员函数的时候,它不能修改所有成员变量的值,因此它也不能调用非const的成员函数

class A {
    void func() const;
};
void A::func()  const{

}

需要注意的地方,函数的声明和定义都需要const修饰,这一点和static不一样。

有关于staitc,会在以后的博客中给出

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值