move-semantics相关内容

C++11 MOVE(X)实际上表示STATIC_CAST<;X&;&;>;(X)?

阅读Stroustrup的C++编程语言第四版,在第7章中他说: move(x)表示static_cast(x),其中X是x的类型 和 由于move(X)不移动x(它只是生成一个右值引用 To x)如果调用了rval()会更好 我的问题是,如果move()只是将变量转换为rval,那么实现对变量的引用(通过更新指针)的实际机制是什么? 我认为move()就像 ..
发布时间:2022-05-08 09:57:56 C/C++开发

我可以用移出的对象做什么?

该标准是否准确定义了一个对象一旦被移出后我可以对它做什么?我曾经认为你可以对移动对象做的所有事情就是破坏它,但这还不够. 以标准库中定义的函数模板swap为例: 模板无效交换(T& a, T& b){T c = std::move(a);//第 1 行a = std::move(b);//第 2 行:赋值给移动对象!b = std::move(c);//第 3 行: ..
发布时间:2022-01-30 16:38:07 C/C++开发

什么是 std::move(),什么时候应该使用它?

这是什么? 它有什么作用? 什么时候使用? 好的链接表示赞赏. 解决方案 维基百科页面关于 C++11 R 值引用和移动构造函数 在 C++11 中,除了复制构造函数,对象还可以有移动构造函数. (除了复制赋值运算符之外,它们还有移动赋值运算符.) 如果对象具有“右值引用"类型(Type &&),则使用移动构造函数而不是复制构造函数. std::move() 是一种类 ..
发布时间:2022-01-30 16:33:31 C/C++开发

移动语义和返回常量值

我有将所有内容作为“const"值返回的习惯(?!?!?).像这样…… 结构体;s 常量 make_s();s const &s0 = make_s();s 常量 s1 = make_s(); 具有移动操作和右值引用以及以下功能... void take_s(s &&s0);void take_s(s const &&s0);//没有意义 我写不下去了…… take_s(make_s() ..
发布时间:2022-01-23 23:34:07 C/C++开发

为什么在返回从函数的返回类型派生的类型的本地对象时不选择移动构造函数?

以下代码被 Clang 和 GCC(主干版本): #include 结构基础{Base() = 默认值;Base(Base const&) = 删除;Base(Base&&) = 默认值;};结构派生:基础{派生()=默认;Derived(Derived const&) = 删除;派生(派生&&)=默认;};自动 foo()->根据{导出d;返回 d;//这里有错误} 导致以下 ..
发布时间:2022-01-19 15:00:51 C/C++开发

return 语句何时需要显式移动?

在对另一个问题的评论中,Jonathan Wakely 回应了我的声明: 对于局部变量函数返回,您永远不需要显式移动价值.这是隐含的移动 -> ...永远不要说永远...如果局部变量,您需要显式移动与返回类型不同,例如std::unique_ptrf() { auto p = std::make_unique();p->foo();返回 p;},但是如果类型相同,它会尽可 ..
发布时间:2022-01-19 14:43:01 C/C++开发

在 Rust 中重用迭代器的最有效方法是什么?

我想重用我制作的迭代器,以避免付费从头开始重新创建它.但是迭代器似乎不能 clone 并且 collect 移动了迭代器,所以我不能重用它. 这或多或少相当于我正在尝试做的事情. 让 my_iter = my_string.unwrap_or("A").chars().flat_map(|c|c.to_uppercase()).map(|c| Tag::from(c).unwrap()); ..
发布时间:2022-01-10 15:00:25 其他开发

标准库对自移动分配有什么保证?

C++11 标准对与标准库相关的自移动赋值有什么看法?更具体地说,selfAssign 的作用是什么(如果有的话)? templatestd::vectorselfAssign(std::vector v) {v = std::move(v);返回 v;} 解决方案 17.6.4.9 函数参数 [res.on.arguments] 1 以下每一项都适用于定义的函数的所有参数在 C++ ..
发布时间:2022-01-07 10:56:56 C/C++开发

为什么 Visual Studio 在这种情况下不执行返回值优化 (RVO)

我正在回答 一个问题并推荐按值返回大类型 因为我相信编译器会执行 返回值优化 (RVO).但是后来有人向我指出 Visual Studio 2013 没有对我的代码执行 RVO. 我发现 这里有一个问题关于 Visual Studio 未能执行 RVO,但在这种情况下,结论似乎是如果真的很重要,Visual Studio 将执行 RVO.就我而言,它确实很重要,它对性能产生了重大影响,我已经 ..
发布时间:2021-12-31 13:34:49 C/C++开发

默认的 Move 构造函数是否定义为 noexcept?

在重新分配时决定是移动还是复制元素之前,向量似乎会检查移动构造函数是否标记为 noexcept .默认移动构造函数是否定义为 noexcept?我看到了以下文档,但没有说明这一点.http://en.cppreference.com/w/cpp/language/move_constructor 隐式声明的移动构造函数 如果没有用户定义的移动为类类型(结构、类或联合)提供构造函数,并且 ..
发布时间:2021-12-30 15:24:51 C/C++开发