【发布时间】:2017-06-24 16:59:02
【问题描述】:
因此,复制构造函数的参数列表包含一个 const 左值引用,例如 const B& x。
但是,移动构造函数的参数列表包含一个右值引用,例如 B&& x。
当我发现这一点时,我觉得很奇怪,所以我尝试定义一个以 const 左值引用作为参数的函数:
void calculator(const Intvec& veccor)
{
cout << "in veccor" << veccor.m_size << "\n";
}
我已经知道 const 左值引用可以绑定到任何东西,所以结果是意料之中的。我尝试使用左值和右值调用该函数,正如预期的那样,一切正常:
calculator(Intvec(33)); //works
Intvec newvec(22);
calculator(newvec); //works
然后我尝试将calculator的参数列表更改为右值引用,正如预期的那样,调用它时只有右值起作用。
既然 const 左值引用可以同时接受左值和右值作为参数,为什么移动构造函数不只是使用 const 左值引用而不是右值引用呢? 为什么不总是使用 const 左值引用,就像在移动构造函数中发生的事情不同时那样?
【问题讨论】:
-
因为它是
const,所以在“窃取”它的内容之前,你必须把它扔掉(坏的)。此外,它(被移动的值)实际上可能已声明为const,从而导致您进入未定义的行为。
标签: c++