1074得票4回答
C++11中的T&&(双引号)是什么意思?

我一直在研究C++11的一些新特性之一,其中一个我注意到的是在声明变量时使用双引号,比如 T&& var。 首先,这个东西叫什么?我希望谷歌能允许我们搜索这样的标点符号。 它到底意味着什么? 乍一看,它似乎是一个双重引用(就像C风格的双指针 T** var),但我很难想象...

565得票7回答
std::forward的主要目的是什么,它解决了哪些问题?

在完美转发中,使用 std::forward 将命名的右值引用 t1 和 t2 转换为未命名的右值引用。这样做的目的是什么?如果我们将 t1 和 t2 保留为左值,那么这会对被调用的函数 inner 产生什么影响呢?template <typename T1, typename T2&g...

519得票6回答
在返回语句中是否需要使用std::move,并且是否应该返回右值引用?

我正在努力理解C++11中的rvalue引用和移动语义。 这些示例有什么区别,哪个示例不会进行向量复制? 第一个示例 std::vector<int> return_vector(void) { std::vector<int> tmp {1,2,3,4,...

347得票9回答
C++11中的Rule-of-Three变成了Rule-of-Five吗?

所以,在观看这个精彩的演讲关于右值引用之后,我认为如果每个类都拥有一个"移动构造函数"template<class T> MyClass(T&& other)(编辑)和一个"移动赋值运算符"template<class T> MyClass& o...

208得票7回答
在lambda中移动捕获

我如何在C++11的lambda中使用move语义(也称为右值引用)进行捕获? 我正在尝试编写类似于以下代码:std::unique_ptr<int> myPointer(new int); std::function<void(void)> example = [...

160得票2回答
使用右值引用返回是否更高效?

例如:Beta_ab&& Beta::toAB() const { return move(Beta_ab(1, 1)); }

149得票1回答
如何在可变参数函数中对所有参数调用std::forward?

我刚刚在编写一个通用对象工厂,并使用boost预处理器元库来制作可变参数模板(使用2010年的版本,它不支持它们)。我的函数使用右值引用和std::forward进行完美转发,这让我想起了一个问题...当C++0X推出并且我有一个标准编译器时,我将使用真正的可变参数模板。 不过,我该如何对参数...

140得票2回答
为什么std::move被命名为std::move?

std::move(x)函数实际上并没有真正移动任何东西。 它只是将一个左值转换为右值。 为什么要这样做呢? 这难道不会引起误导吗?

122得票8回答
常量的右值引用有什么用处吗?

我猜不会有用,但我想确认一下。对于一个类类型 Foo,是否有使用 const Foo&& 的情况?

87得票1回答
C++11中使用指定模板参数的make_pair无法编译通过。

我刚刚尝试使用启用了-std=c++11选项的g++ 4.7(较新的快照之一)进行实验。我尝试编译我的一些现有代码库,但其中一个失败的案例让我有些困惑。如果有人能够解释一下发生了什么,我将不胜感激。这是代码:#include <utility> #include <iostr...