gpt4 book ai didi

c++ - 右值使用 - C++ 11

转载 作者:行者123 更新时间:2023-11-28 01:37:51 25 4
gpt4 key购买 nike

我正在通过他的创作者的书学习 C++,我知道 rValue 基本上是不能通过它的地址定义的东西,你想移动它而不是复制它。

在本书的后面,Stroustrup 给出了一个Points struct

的例子
struct Point{
int x,y;
}

struct Points{
vector<Point> elem;
Points(Point p0){elem.push_back(p0)};
...
}

Point x2{ {100,200} }

所以我的问题基本上是为什么在构造函数中它不使用 rValue 来移动发送的值?

也许像:

struct Points{
vector<Point> elem;
Points(Point&& p0){elem.push_back(p0)};
...
}

这样做更合适/不太清楚吗?

问候

最佳答案

当移动比复制成本更低时,移动值特别有用。碰巧,复制一个 int super 便宜。你的 CPU 会一直这样做,因为它将值从内存加载到寄存器,或者在寄存器之间加载。结果,对于 int moving is the same as copying .

你的 Point是两个整数,同样的逻辑仍然成立。但是vector<Point>是另一回事。你会发现 sizeof(Points)是一个小数字。那是因为它不包括 sizeof(Point)*elem.size() ,一个可以在运行时变化的数量。这就是移动变得有益的地方。移动该 vector 会移动 sizeof(Point)*elem.size() .

关于c++ - 右值使用 - C++ 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48518684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com