函数引用饰词用法
作者:
dhz120 | 来源:发表于
2020-04-11 11:15 被阅读0次
说明:函数引用饰词用法其实跟用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
本文标题:函数引用饰词用法
本文链接:https://www.haomeiwen.com/subject/rvzemhtx.html
网友评论