37得票3回答
返回值的转发。需要使用std::forward吗?

我正在编写一个库,它将来自其他库的许多函数和方法进行包装。为了避免复制返回值,我使用std::forward进行应用,如下所示: template<class T> T&& wrapper(T&& t) { f(t); // t pass...

34得票5回答
通过std::bind传递rvalue

我想通过std::bind传递一个右值引用到一个C++0x中要求接受右值引用的函数。 我无法弄清楚如何做到这一点。 例如:#include <utility> #include <functional> template<class Type> void ...

34得票1回答
Lvalue到rvalue引用绑定

编译器一直在抱怨我试图将一个左值绑定到右值引用上,但我无法看出问题所在。 我是C ++ 11、移动语义等方面的新手,请耐心等待。 我有这个函数: template <typename Key, typename Value, typename HashFunction, typena...

33得票2回答
非类类型的右值永远具有cv无限定类型。

§3.10第9节指出,“非类右值始终具有无cv修饰类型”。这让我想起来......int foo() { return 5; } const int bar() { return 5; } void pass_int(int&& i) { std::...

33得票3回答
C++标准是否保证插入关联容器失败时不会修改rvalue引用参数?

#include <set> #include <string> #include <cassert> using namespace std::literals; int main() { auto coll = std::set{ "hell...

32得票2回答
声明本地变量为右值引用(rvalue-reference),例如T&& r = move(v),是否没有用处?

在特定情况下,你们能否给我提供一个具有说明性的例子,以证明以下陈述的有用性和必要性?AnyTypeMovable v; AnyTypeMovable&& r = move(v);

32得票1回答
发生了什么:在std::shared_ptr上使用C++ std::move会增加use_count吗?

我一直认为在 std::shared_ptr 上使用 std::move() 会窃取指针并将原始指针设置为 nullptr,因此不会增加引用计数。但在我的环境中似乎并非如此。 设置: MacOS,g++ -version => "Apple LLVM version 10.0.1 (...

31得票4回答
在引用限定符上重载成员函数有什么用途?

C++11使得基于引用限定符(reference qualifiers)重载成员函数成为可能:class Foo { public: void f() &; // for when *this is an lvalue void f() &&; // fo...

31得票5回答
D语言是否有类似于C++0x的移动语义?

"值类型"与外部资源(如std::vector<T>或std::string)的一个问题在于复制它们往往非常昂贵,并且在各种上下文中会隐式创建副本,因此这往往是一个性能问题。C++0x针对这个问题的答案是移动语义,它的概念基于资源窃取的想法,技术上由rvalue引用驱动。 D语言...

31得票3回答
在C++0x中传递/移动构造函数的参数

如果我有一个带有n个参数的构造函数,其中任何参数都可以是rvalue和lvalue。是否可能通过移动语义来支持rvalues而无需为每个可能的rvalue/lvalue组合编写2^n个构造函数?