史上最全的const用法总结

缘起

其实const的用法在八股文系列的文章中很常见,但是总是过于零散,总结不是很全面,遂整理成文,以供大家享用,如果有不够全面还请大家补充,万分感谢。

正文

const与变量

使用const修饰变量,表征变量本身不可变,具有如下的使用场景:

  1. 定义常量,取代#define,

  2. const修饰函数形参,强制该参数在函数内不可变。

  3. const修饰函数返回值,表征函数返回值的const属性,该值不可改变。

const double PI = 3.14159265358979323846;
//#define PI 3.14159265358979323846
void func1(const int a)
{
}
void func2(const int b)
{
}
struct BigObj
{
   
};
const BigObj func()
{
    BigObj obj;
    return obj;
}

const与指针

  1. 常量指针,即指针是常量,指针本身不可改变,指针指向内容可变
  2. 指针常量,即指向常量的指针,指针指向内容为常量不可变,指针本身可变,
  3. 常量指针常量,指针和指针指向内容均不可改变
    常量指针和指针常量的叫法不一而足,各种解释也层出不穷。请参考如下示例代码理解记忆:const距离谁近,修饰的就是谁,谁不可变
 int a =10;
int b =20;
int c =30;
//常量指针
int * const const_ptr = &a;
//const_ptr = &b;//指针本身不可修改
*const_ptr = 50;//指针指向内容可以修改
//指针常量
const int* ptr_const1= &a;
//*ptr_const1 = 20;//指向内容为常量,不可修改
ptr_const1 = &b;//指针本身可变
int const * ptr_const2 = &a;
//*ptr_const2 = 20;//指向内容为常量,不可修改
ptr_const2 = &b;//指针本身可变
const int * const c_ptr_c = &a;//两者均不可变化
//*c_ptr_c = 30;
int c =60;
// c_ptr_c = &c;

const与引用

const修饰引用,常用于函数传参,可以减少对象的copy操作,尤其是针对复杂对象,可以增加效率

struct BigObj
{
};
void func(const BigObj& obj)
{
}

const与类

const修饰成员函数,保证函数内不会修改类的成员变量

class People
{
public:
    People();
    ~People();
    int getAge()const//不会修改成员变量
{
        return m_age;
    }
private:
    int m_age;
};
const修饰的函数强制函数内部不可修改成员变量的值,当存在修改程序员变量的场景时,可以使用mutable修饰变量 ``` mutable int m_age; ```

const属性移除

C++提供运算符const_cast用于去除变量的const限定,用于类型转换,注意const_cast 中的类型必须是指针、引用或指向对象类型成员的指针。

const int constantValue = 5;
int& nonConstReference = const_cast<int&>(constantValue);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值