因此,复制构造函数的参数列表由一个 const 左值引用组成,例如const B& x. 然而,移动构造函数的参数列表由一个右值引用组成,如B&& x.
当我发现这一点时,我觉得很奇怪,所以我尝试定义一个以 const 左值引用作为参数的函数:
void calculator(const Intvec& veccor)
{
cout << "in veccor" << veccor.m_size << "\n";
}
Run Code Online (Sandbox Code Playgroud)
我已经知道 const 左值引用可以绑定到任何东西,所以结果有点在意料之中。我尝试使用左值和右值调用该函数,正如预期的那样,一切正常:
calculator(Intvec(33)); //works
Intvec newvec(22);
calculator(newvec); //works
Run Code Online (Sandbox Code Playgroud)
然后我尝试将参数列表更改为calculator右值引用,正如预期的那样,只有右值在调用它时起作用。
那么既然 const 左值引用可以同时接受左值和右值作为参数,为什么移动构造函数不只是使用 const 左值引用而不是右值引用呢?为什么不总是使用 const lvalue 引用,比如在你不会像移动构造函数中发生的事情一样的情况下?
为数组中的第一个元素赋值时,为什么必须指定索引号?假设我们有这个数组:
int childer[] = {10, 30, 50};
Run Code Online (Sandbox Code Playgroud)
那么这两个childer并childer[0]会访问数组的第一个元素,那么你为什么不能做childer = 15;?