引用和const的使用

一:引用

        1.引用的定义:是一个已存在变量的别名,相当于两者共用一块地址。

        2.引用的主要特征:1.声明时必须初始化。2.初始化后不能改变引用的对象

        3.引用与指针的区别:1.引用必须在定义时初始化,指针可以先声明后赋值。2.引用初始化后不能改变引用的对象,指针可以随时改变指向。3.不存在指向空值的引用但是存在指向空值的指4.sizeof(引用)得到的是所指向对象的大小,sizeof(指针)得到的是指针本身的大小

        4.引用在形参以及返回值时的使用:

                1.目的是:避免拷贝,提高效率

                2.在形参中:

class MyClass
{
private:
	int _data;
public:
	void setdata(int& data)//相当于传址调用
	{
		data *= 10;//函数中的任何操作都会改变data的值
		cout << data << endl;//输出结果应为_data的十倍
	}
};

                3.在返回值中:

class MyClass
{
private:
	int _data;//生命周期在MyClass中
public:
	int& getData()
	{
		int data;//生命周期只在函数中,不能在此return中使用
		return _data;
	}  
};

        注意:生命周期必须在出了函数作用域后仍能使用

二:const

        1.const的定义:是C++中用于声明常量的关键字

        2.const与对象宏(#define)的区别:1.const 变量有明确的类型,编译器可以进行类型检查。#define 是简单的文本替换,不进行类型检查。2.const 变量在内存中有实际的位置。#define 宏在预处理阶段被替换,不占用内存。3.const 遵循正常的作用域和可见性规则。#define 从定义点到文件结束都有效。4.const 变量可以在调试器中查看和监视。#define 宏在预处理阶段被替换,调试时看不到原始定义。

        3.const在返回值,形参,this指针时的使用

        1.目的是:禁止修改,防止意外

        2.用在返回值时:可以防止返回值被修改。这在返回指针或引用时特别有用

class MyClass
{
private:
	int _data;
public:
	const int* getdata() 
	{
		return &_data;  // 这是一个指向 const int 类型的指针。
        //意味着指针所指向的 int 值是常量,不可以被修改。
	}
};

        3.用在形参时:可以保证函数不会修改传入的参数。

class MyClass
{
private:
	int _data;
public:
	void printdata(const int& data)
	{
		//data++; // 不能修改 value
		std::cout << data << std::endl; //只能读取
	}
};

        4.用在this指针时:this 指针实际上变成了指向 const 对象的指针。这意味着在 const 成员函数中,不能修改非 mutable 成员变量。

class MyClass {
public:
    void setData1(int value)
    {
        _data = value;
        cout << _data;
    }
    
    void setData2(int value)const
    {
        //_data = value; //这时候this指针被const修饰,不能改变其成员函数的值
        cout << _data;
    }

private:
    int _data;
};

        5.const修饰的对象或者函数不能调用非const的对象或者函数

          但是非const的对象或者函数能调用const修饰的对象或者函数

三:引用和const的联系:

        建议有引用的时候,一起使用const。因为引用的过程中可能涉及产生临时变量、隐式类型或者匿名对象等问题,这时候不加const会出错。所以引用和const尽量一块使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值