C++速览之const

const

1、是什么?
在C++中,const 是一种关键字,用于指定常量或表示不可修改

1.1 修饰变量
声明常量:通过在变量声明前加上const关键字,可以将变量声明为常量,即其值不能被修改。

const int x = 5; // 声明一个常量x,其值为5,不可修改

防止意外修改:将变量声明为 const 可以防止意外的修改,提高代码的可靠性和可维护性。

1.2 修饰函数参数
函数参数为只读:将函数参数声明为const表示函数内部不会修改该参数的值。

void func(const int x) {
// x 是只读参数,不可修改
}

1.3 修饰函数返回值
返回值为只读:将函数返回值声明为const表示返回值为只读,不能被修改。

const int getValue() {
return 42;
}

#include <iostream>

using namespace std;

class A {
private:
    int num;
public:
    A() : num(2) {}

    void set_num() {
        this->num = 10;
    }

    void get_num() const {
        printf("%d\\n", num);
    }
};

class B {
public:
    const class A *get() {
        class A *p = new A();
        return p;
    }
};

int main() {
    B b;
    b.get()->get_num();
    b.get()->set_num();  // 编译失败,因为返回的对象是const修饰,所以不允许修改成员
    return 0;
}

1.4 修饰类成员

常量成员变量:在类中使用 const 声明的成员变量是类的常量成员,一旦初始化后就不能修改

常量成员函数:在类中使用 const 修饰的成员函数表示该函数不会修改类的成员变量

class MyClass {
private:
    const int value;  // 声明一个常量成员变量

public:
    int getValue() const {
        return value;  // 常量成员函数,不能修改非静态成员变量
    }
};

1.5 修饰指针

const在 * 右侧:表示指针本身是一个常量,即指针指向的内存地址不能修改。

int x = 5;
int* const ptr = &x;  // ptr 是一个指向整型变量的常量指针
*ptr = 10;  // 可以修改指针指向的值
ptr++;  // 错误,指针本身是一个常量,不能修改指向的地址

const在 * 左边:表示指针指向的值是一个常量,即指针所指向的内存地址的值不能修改。

int x = 5;
const int* ptr = &x;  // ptr 是一个指向常量整型的指针
*ptr = 10;  // 错误,不能修改指针指向的值
ptr++;  // 可以修改指针指向的地址

const在 * 左右都有:表示指针本身是常量,且指针指向的对象也是常量。

const int x = 5;
const int* const ptr = &x;  // ptr 是一个指向常量整型的常量指针
*ptr = 10;  // 错误,不能通过指针修改 x 的值
ptr++;  // 错误,指针本身和指向的对象都是常量


使用 const 的好处:

提高代码的可读性:通过明确标识常量和只读的对象,使代码更易于理解和维护。

防止意外修改:将对象声明为 const 可以防止在代码中无意中修改其值,提高代码的稳定性和可靠性。

编译器优化:编译器可以使用 const 信息进行优化,提高代码的执行效率。

需要注意的是,const 对象必须在声明时进行初始化,并且其值在编译时就确定了,不能在运行时修改

在编写代码时,合理使用 const 可以提高代码的可读性、可靠性和性能。通过将对象声明为 const,可以明确指示其只读特性,并减少意外的修改,从而提高代码的质量和可维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挥剑决浮云 -

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值