在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