【发布时间】:2014-12-18 21:42:53
【问题描述】:
在***注释的那一行,为什么要调用Bar的拷贝构造函数? input_bar 是一个右值引用,所以我希望调用移动构造函数。它是否转换为左值引用?如果我将该行更改为bar_(std::move(input_bar)),我可以调用移动构造函数。
#include <iostream>
#include <array>
#include <memory>
class Bar
{
public:
Bar(const Bar& bar)
{
std::cout << "copy constructor called" << std::endl;
}
Bar(Bar&& bar)
{
std::cout << "move constructor called" << std::endl;
}
};
class Foo
{
public:
Foo(Bar&& input_bar) :
bar_(input_bar) // ***
{
}
Bar bar_;
};
int main()
{
Bar bar;
Foo foo(std::move(bar));
return 0;
}
【问题讨论】:
标签: c++ c++11 move lvalue rvalue