C++/C编程学习:梳理15—const T、const T*、T *const、const T&、const T*& 的区别

原文:https://blog.youkuaiyun.com/luoweifu/article/details/45600415

这里的T指的是一种数据类型,可以是int、long、doule等基本数据类型,也可以是自己类型的类型class。单独的一个const你肯定知道指的是一个常量,但const与其他类型联合起来的众多变化,你是不是就糊涂了?下面我们一一来解析。

const T

定义一个常量,声明的同时必须进行初始化。一旦声明,这个值将不能被改变。

const T*

指向常量的指针,不能用于改变其所指向的对象的值。

const int i = 5;
const int i2 = 10;
const int* pInt = &i;           //正确,指向一个const int对象,即i的地址
//*pInt = 10;                   //错误,不能改变其所指缶的对象
pInt = &i2;                     //正确,可以改变pInt指针本身的值,此时pInt指向的是i2的地址
const int* p2 = new int(8);     //正确,指向一个new出来的对象的地址
delete p2;                      //正确
//int* pInt = &i;               //错误,i是const int类型,类型不匹配,不能将const int * 初始化为int *
int nValue = 15;
const int * pConstInt = &nValue;    //正确,可以把int *赋给const int *,但是pConstInt不能改变其所指向对象的值,即nValue
*pConstInt = 40; 

const int* 与int* const的区别

指针本身就是一种对象,把指针定义为常量就是常量指针,也就是int* const的类型,也可以写成int *const,声明时必须初始化

const int* 指针指向的对象不可以改变,但指针本身的值可以改变;int* const 指针本身的值不可改变,但其指向的对象可以改变。

const T&

对常量(const)的引用,又称为常量引用,常量引用不能修改其邦定的对象。

在函数中的应用

1.希望传入一个对象,又不想让函数体修改这个对象。

void Dealwith(const Data& data)
{
    cout << data.value << endl;
    //data.value = 5;       //错误,data是常量引用,不能改变其邦定的对象
}
void Dealwith(const Data* pData)
{
    cout << pData->value << endl;
    //pData->value = 5;     //错误,pData是指向常量对象的指针,不能改变其指向的对象
}

2.在类中的使用,返回一个类的成员,但不希望调用方修改这个成员。

class MyData
{
public :
    MyData(std::string name, Data data)
    {
        m_name = name;
        m_data = data;
    }

    const Data* GetData()
    {
        return &m_data;
    }


private:
    std::string m_name;
    Data m_data;
};

MyData mydata("", Data(100));
const Data* pData = mydata.GetData();
cout << pData->value << endl;   //pData->value = 100
//pData->value = 50;            //错误,pData是指向常量对象的指向,不能改变其指向对象的值 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值