前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >历史上最全的const用法总结

历史上最全的const用法总结

作者头像
程序员的园
发布2024-07-18 13:14:04
370
发布2024-07-18 13:14:04
举报
文章被收录于专栏:程序员的园——原创文章

如果知道我会死在哪里,那我将永远不去那个地方 -查理 芒格

缘起

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

const与变量

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

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

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

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

代码语言:javascript
复制
const double PI = 3.14159265358979323846;
//#define PI 3.14159265358979323846
代码语言:javascript
复制
void func1(const int a)
{
}

void func2(const int b)
{

}
代码语言:javascript
复制
struct BigObj
{
    
};

const BigObj func()
{
    BigObj obj;
    return obj;
}

const与指针

1. 常量指针,即指针是常量,指针本身不可改变,指针指向内容可变

2. 指针常量,即指向常量的指针,指针指向内容为常量不可变,指针本身可变,

3. 常量指针常量,指针和指针指向内容均不可改变

常量指针和指针常量的叫法不一而足,各种解释也层出不穷。请参考如下示例代码理解记忆:const距离谁近,修饰的就是谁,谁不可变

代码语言:javascript
复制
 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操作,尤其是针对复杂对象,可以增加效率

代码语言:javascript
复制
struct BigObj
{

};

void func(const BigObj& obj)
{
}

const与类

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

代码语言:javascript
复制
class People
{
public:
    People();
    ~People();

    int getAge()const//不会修改成员变量
{
        return m_age;
    }

private:
    int m_age;
};

const修饰的函数强制函数内部不可修改成员变量的值,当存在修改程序员变量的场景时,可以使用mutable修饰变量

代码语言:javascript
复制
  mutable int m_age;

const属性移除

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

代码语言:javascript
复制
const int constantValue = 5;
int& nonConstReference = const_cast<int&>(constantValue);
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的园 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档