函数引用饰词用法

2020-04-11  本文已影响0人  dhz120

说明:函数引用饰词用法其实跟用const修饰时差不多,即当对象是左值时,会调用左值的那个函数重载版本;当对象为右值时,会调用右值的那个函数重载版本

示例

#ifndef REFQUADEMO_H
#define REFQUADEMO_H

#include <iostream>
#include <vector>

using namespace std;

// 引用饰词练习, 用法跟用const修饰的差不多
namespace T15_NS {

class Widget
{
    using DataType = vector<int>;

public:
    // 仅当*this为左值时调用
    // 左值引用型别的重载版本,返回的是一个左值引用(即一个左值)
    DataType &data() & {
        cout << "DataType &data() & called\n";
        return m_datas;
    }

    // 仅当*this为右值时调用
    // 右值引用型别的重载版本,返回的是一个临时对象(即一个右值)
    DataType data() && {
        cout << "DataType data() && called\n";
        return move(m_datas);
    }

private:
    DataType m_datas;
};

// 工厂函数,返回右值
Widget makeWidget()
{
    return Widget();
}

void test()
{
    Widget w1;

    //  调用Widget::data的左值重载版本, d1采用拷贝构造完成初始化
    auto d1 = w1.data();

    //  调用Widget::data的右值重载版本, d1采用移动构造完成初始化
    auto d2 = makeWidget().data();


}

} // T15_NS

#endif // REFQUADEMO_H

上一篇下一篇

猜你喜欢

热点阅读