rValue use - c++ 11
rValue use - c++ 11
我正在通过他的创造者的书学习c ++,我知道rValue基本上是无法通过它的地址定义的,你想移动它而不是复制。
在本书的后面,Stroustrup给出了一个Points结构的例子
。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
非常便宜。您的 CPU 将一直执行此操作,因为它将值从内存加载到寄存器或在寄存器之间加载。因此,对于int
移动与复制相同。
您的Point
是两个整数,并且相同的逻辑仍然成立。但vector<Point>
是另一回事。你会发现sizeof(Points)
是一个很小的数字。那是因为它不包括 sizeof(Point)*elem.size()
,一个在运行时可能会变化的数量。这就是搬家变得有益的地方。移动该向量会移动sizeof(Point)*elem.size()
。
"它不使用 rValue"到底是什么意思?您的意思是p0
不是作为右值"发送"的,还是意味着对push_back
的调用不使用右值?
-
Point&& p0
是用右值初始化的 - 到目前为止一切顺利。 -
push_back (p0)
复制一个左值,你可能想做的是:push_back (std::move (p0))
.
您可以使用一个很好的助记符来区分左值和右值:
每当对象有一个名称时,它就是一个左值,每当 对象没有名称,它是一个右值。
例如: call_to_some_function (std::string {"Hi there"});
,这里传递给函数的字符串没有名称,它是一个右值。这同样适用于所有临时人员。
void some_function (std::string&& what)
{
do_something_with (what); // <- what is an lvalue
do_something_else (std::move (what)); // <- turned into rvalue
const std::string& foo = get_some_foo_string ();
do_something_else (std::move (foo)); // <- No rvalue here!
}
相关文章:
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- C++ "error: invalid use of void expression"
- 我看到"use of undeclared identifier"错误,有人可以告诉我如何解决它吗?
- 收到错误"invalid use of non-static data member 'stu::n' "
- 模式"allocate memory or use existing data"
- C++ "error: use of overloaded operator '*' is ambiguous"似乎只有一场比赛
- Is it good to use SDL_PIXELFORMAT_UNKNOWN?
- C++ "Invalid use of 'this' in non-member function" ,
- std::launder use cases in C++20
- 继承类时"invalid use of incomplete type ‘class tree_node_t’"
- "reserved for any use"的含义是什么?
- C++14 遇到奇怪的"use of deleted function"错误
- C++ 中的 use 函数是什么?
- 出现这种错误的原因是什么"invalid use of non-static data member "
- 模板类和'invalid use of incomplete type'错误
- 为什么"non-standard syntax; use '&' to create a pointer to member"在 CTOR 中使用线程?
- "invalid use of incomplete type" .解决循环依赖关系
- 使用互斥锁和条件变量作为成员时如何修复"use of deleted function"?
- 如何在 LLVM 后端的机器级别找到 def-use 链
- "Include What You Use"