c++11 函数的引用限定符(reference qualifiers)

本文介绍了C++11中关于左值和右值对象调用函数的新特性,通过示例代码展示了如何使用引用限定符(&和&&)实现不同的函数重载,以针对左值和右值对象执行不同的操作。在示例中,`doWork()`函数有不同的左值和右值版本,`RetValue()`函数返回左值引用和右值引用,展示了如何根据对象的状态选择合适的函数进行调用。
摘要由CSDN通过智能技术生成

在C++11的新特性中,关于左值/右值的对象调用函数,有了一些新的变化。

如下面的代码:

class Widget {
public:
	void doWork() & //只有*this为左值的时候才能被调用
    {
        std::cout << "left value call" << std::endl;
    }
	void doWork() && //只有*this为右值的时候才能被调用
    {
        std::cout << "right value call" << std::endl;
    }

    int& RetValue() & 
    {
        int b = 10;
        return b;
    }

    int&& RetValue() &&
    {
        int b = 10;
        return std::move(b);
    }

    int m_value;
}; 

// 创建一个右值对象
static Widget make()
{
    Widget w;
    return w;
}

int main()
{
    std::cout << "============1============" << std::endl;
    Widget w;
    w.doWork();
    std::cout << "============2============" << std::endl;
    make().doWork();
    std::move(w).doWork();
}

输出:
============1============
left value call
============2============
right value call
right value call

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值