22得票3回答
如何完美地转发成员变量

考虑以下代码:template<typename T> void foo(T&& some_struct) { bar(std::forward</* what to put here? */>(some_struct.member)); } 如...

21得票3回答
为什么使用`make_x()`函数时移动构造函数不会被尽可能省略?

我无法理解为什么在最后一种情况下启用复制省略时(甚至是强制性的,例如在C++17中),为什么会调用移动构造函数: class X { public: X(int i) { std::clog << "converting\n"; } X(const X &am...

21得票1回答
为什么在访问容器元素之前要使用std::forward?

Scott Meyers在他的新书"Effective Modern C++"中,以以下函数作为使用decltype(auto)的示例 (第28页):template<typename Container, typename Index> decltype(auto) authA...

20得票3回答
C++统一赋值运算符移动语义

编辑:已解决,请参见评论。 - 不知道如何在没有答案的情况下标记为已解决。 在观看了 Channel 9 上有关 c++0x 中完美转发 / 移动语义的视频后,我有些倾向于认为这是编写新赋值运算符的好方法。 #include <string> #include <vect...

20得票3回答
为什么本地变量不应使用auto&&?

当使用模板时T&&通常用作转发引用或通用引用(正如Scott Meyers所说),但我看到有些博客在代码示例中使用auto&&。我认为auto本身就足够了,然而,Herb Sutter在CppCon 2014中说:永远不要在本地变量中使用auto&&am...

18得票1回答
为什么std::forward有两个重载?

根据以下引用折叠规则: T& & --> T& T&& & --> T& T& && --> T& T&& && --> T&& ...

18得票1回答
为什么完美转发函数必须是模板化的?

为什么下面的代码是有效的:template<typename T1> void foo(T1 &&arg) { bar(std::forward<T1>(arg)); } std::string str = "Hello World"; foo(str...

18得票2回答
完美转发对象成员函数

假设我有两个结构体: struct : struct X {}; struct Y { X x; } 我有以下函数: void f(X&); void f(X&&); 我该如何编写一个函数 g(),它接受 Y& 或 Y&&,但是分别将...

17得票2回答
有没有办法描述通过转发引用参数不会发生变异?

在众多的资格认证中,其中一个好处就是使API更易理解,例如: template<typename T> int function1(T const& in); // clearly, the input won’t change through function1 引...

17得票3回答
完美转发setter的正确`enable_if`约束是什么?

Herb Sutter的CppCon演讲Back to the Basics!现代C++必备要素讨论了不同的参数传递选项,并比较了它们在性能和编写/教学难度方面的差异。 '高级'选项(在所有测试案例中提供最佳性能,但对大多数开发人员来说太难写)是完美转发,其中给出了示例(PDF, pg. 28...