82得票5回答
一个 RValue 引用返回有什么实际用处吗?

当函数需要返回RValue引用时,是否有特定的原因?这是一种技巧、诀窍、成语或模式吗? MyClass&& func( ... ); 我知道一般情况下返回引用的危险性,但有时我们仍然这样做,不是吗?T& T::operator=(T)只是一个惯用的例子。但是T&a...

77得票4回答
为什么有些人在移动赋值时使用交换(swap)?

例如,stdlibc++拥有以下内容:unique_lock& operator=(unique_lock&& __u) { if(_M_owns) unlock(); unique_lock(std::move(__u)).swap(*...

75得票6回答
Rust如何提供移动语义?

Rust语言网站声称移动语义是该语言的特性之一。但我看不出Rust如何实现移动语义。 在Rust中,只有Rust boxes才使用移动语义。 let x = Box::new(5); let y: Box<i32> = x; // x is 'moved' 上述的Rust代...

72得票4回答
为什么在C++11中有右值引用的情况下还要使用std::move?

可能是重复问题: 什么是移动语义? 我最近参加了一个C++11研讨会,听到了以下的建议。when you have && and you are unsure, you will almost always use std::move 有人能解释一下为什么要使用 ...

70得票3回答
std::function的移动语义版本

因为 std::function 可以复制,所以标准要求用于构造它的可调用对象也必须可以被复制: n337 (20.8.11.2.1) template<class F> function(F f); 要求: F 必须是可复制的。对于参数类型 ArgTypes 和返回类型 R 的...

68得票2回答
为什么使用std::move会阻止返回值优化(RVO)?

在很多情况下,当从函数中返回一个本地对象时,会触发RVO(返回值优化)。然而,我认为明确使用std::move至少可以强制执行移动语义,即使RVO没有发生,但是只要可能,RVO仍然会被应用。然而,事实似乎并非如此。#include "iostream" class Hea...

67得票1回答
C++11中的大部分setter函数是否应该编写为接受通用引用的函数模板?

考虑一个类 X,它有 N 个成员变量,每个变量都是可复制和可移动的类型,并且有 N 个对应的 setter 函数。 在 C++98 中,定义 X 的代码可能如下所示:class X { public: void set_a(A const& a) { _a = a; } ...

67得票1回答
无法使用'rvalue references to *this'功能的解决方法

我有一个代理容器类封装了一个可移动对象,并希望代理能够在自身被移动时隐式返回基础对象的右值引用。 我相信我可以按照n2439提案"将移动语义扩展到*this"来实现此行为,但它在gcc的发布版本中尚不可用,而且可能要等一段时间。 下面的代码是我最终的目标,但目前还不可能。在此功能可用之前,...

66得票2回答
我能把这句话翻译成中文:我通常/总是可以使用std::forward代替std::move吗?

我一直在观看Scott Meyers在C++ and Beyond 2012会议上的通用引用演讲,到目前为止一切都很清晰。然而,在大约50分钟左右,一个观众提出了一个问题,这也是我想知道的。Meyers说他不关心答案,因为这是非成语化的,会让他感到愚蠢,但我仍然很感兴趣。 所呈现的代码如下:...

64得票3回答
为什么移动物体比复制更快?

我听过Scott Meyers说过"std::move()不会移动任何东西" ... 但我不明白它的意思。 所以为了明确我的问题,请考虑以下内容: class Box { /* things... */ }; Box box1 = some_value; Box box2 = box1;...