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...

226得票6回答
make_unique 和完美转发

为什么标准的C++11库中没有std::make_unique函数模板?我发现这个问题非常困扰。 std::unique_ptr<SomeUserDefinedType> p(new SomeUserDefinedType(1, 2, 3)); 有点啰嗦。以下的表述不是更好吗...

195得票4回答
std::move和std::forward之间有什么区别?

我在这里看到了这个: 调用基类移动构造函数的移动构造函数 有人能解释一下吗: std::move和std::forward之间的区别,最好附带一些代码示例? 如何轻松地理解它们,以及何时使用哪个?

172得票3回答
std::forward在传递左值/右值引用时是如何工作的,特别是如何工作的?

可能重复: std::forward的主要目的是什么,它解决了哪些问题? 我知道它的作用和使用时机,但我仍然无法理解它的工作原理。请尽可能详细地解释,如果允许使用模板参数推导,什么情况下使用std::forward会不正确。 我困惑的部分是: "如果有名字,它就是左值" - 如果是这样的话...

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

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

104得票3回答
std::forward和std::move的用法

我经常看到说std::forward只能用于模板参数。然而,我一直在问自己为什么。看下面的例子: void ImageView::setImage(const Image& image){ _image = image; } void ImageView::setImage...

73得票5回答
捕获 lambda 中的 perfectly-forwarded 变量

template<typename T> void doSomething(T&& mStuff) { auto lambda([&mStuff]{ doStuff(std::forward<T>(mStuff)); }); la...

71得票2回答
通用引用和转发引用有什么区别?

这个函数的参数将会绑定到一个右值引用: void f(int && i); 然而,该函数的参数将绑定到rvalue或lvalue引用之一: template <typename T> void f(T && t); 我经常听到这被称为...

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

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