C++难点解析之左值和右值

C++难点解析之左值和右值

C++ 中根据值的是否有标志是否可移动特性,可分为左值和右值。C++ 中左值和右值的概念可以说是继承于C语言,在C语言中左值表示可以出现在等号左边也能够出现在等号右边的值,右值则指只能出现在等号右边的值。对于C++中的左值和右值,需要区分基础类型和自定义类型。

  1. 基础类型的左值和右值的概念基本和C语言相通。
  2. 对于自定义类型,可以通过非const成员函数更改属性。
  3. const左值引用会延长右值的生命周期。

对于C++ 中的左值和右值我们需要谨记上面这三点,下面通过几个例子来展示这几个特性。


class ValueCl
{
public:
	ValueCl(const int &value) :mValue(value) {};

public:
	void SetValue(const int& value) { mValue = value; }
	int GetValue() const { return mValue; }

	ValueCl& operator+(const ValueCl& v)
	{
		mValue += v.mValue;

		return *this;
	}

protected:
	int mValue;
};

int main()
{
	/*
	 * 此处体现了可以在自定义类型的右值对象上调用类方法修改右值属性,
	 * 并且const左值引用可以延长右值的生命周期
	 */
	ValueCl{ 3 }.SetValue(4);

	/*
	 * 对于这种情况下的右值可以出现在赋值表达式的左侧是因为,
	 * ValueCl& operator=(const ValueCl& v);的默认赋值运算符的存在。
	 * 同时可以在右值对象上调用类非const方法
	 */
	ValueCl{ 1 } + ValueCl{ 2 } = ValueCl{ 3 };
}

仔细理解上面给出的代码,基本可以解决C++中左值和右值全部的迷惑。

转载于:https://my.oschina.net/taodf/blog/1837314

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值