小编Jak*_*ake的帖子

右值引用和作为参数的 const 左值引用之间的混淆

因此,复制构造函数的参数列表由一个 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 引用,比如在你不会像移动构造函数中发生的事情一样的情况下?

c++

5
推荐指数
1
解决办法
1323
查看次数

为数组中的第一个元素赋值时,为什么必须指定索引号?

为数组中的第一个元素赋值时,为什么必须指定索引号?假设我们有这个数组:

int childer[] = {10, 30, 50};
Run Code Online (Sandbox Code Playgroud)

那么这两个childerchilder[0]会访问数组的第一个元素,那么你为什么不能做childer = 15;

c c++

0
推荐指数
1
解决办法
148
查看次数

标签 统计

c++ ×2

c ×1