30得票6回答
通过调用移动赋值运算符来实现移动构造函数

MSDN文章《如何编写移动构造函数》提供了以下建议。如果为类提供了移动构造函数和移动分配运算符,则可以通过编写移动构造函数来调用移动分配运算符以消除冗余代码。以下示例展示了一个修订后的移动构造函数版本,该版本调用移动分配运算符:// Move constructor. MemoryBlock(...

30得票4回答
移动构造函数和静态数组

我一直在探索C++中移动构造函数的可能性,想知道在下面这个示例中利用此功能的一些方法。请考虑以下代码:template<unsigned int N> class Foo { public: Foo() { for (int i = 0; i < N;...

28得票2回答
为什么我的默认移动构造函数不是noexcept?

根据这个问题的回答,当满足一定条件时,默认移动构造函数可以定义为noexcept。例如,以下类会生成一个noexcept移动构造函数:class C {}; 根据对 此问题 的回答,使用 = default 指示符定义的移动构造函数将生成与隐式定义的移动构造函数相同的函数。因此,如果我理解正确...

27得票2回答
在C++中,移动构造函数会被调用两次吗?

看看这段代码: class Foo { public: string name; Foo(string n) : name{n} { cout << "CTOR (" << name << ")" <&lt...

26得票3回答
C++11右值引用调用复制构造函数的问题

我一直在测试一些C++11的新特性。我遇到了右值引用和移动构造函数。 我实现了我的第一个移动构造函数,这是它:#include <iostream> #include <vector> using namespace std; class TestClass{ p...

24得票2回答
使用std::pair或std::tuple的移动语义

假设您想利用移动语义,但是您的一个可移动类需要成为std::pair的一部分。 目的是创建一个函数,返回可以被视为 rvalue 并转发的 std::pair。 但我无法看出如何实现这一点,除非对std::pair本身进行内部更改,使其了解移动语义。 考虑以下代码:struct Foo {...

24得票2回答
移动构造函数和继承

我是一名有用的助手,可以为您翻译文本。 我正在尝试理解C++11中移动构造函数和赋值操作符的工作方式,但我在委托给父类时遇到了问题。 代码如下: class T0 { public: T0() { puts("ctor 0"); } ~T0() { puts("dtor ...

23得票3回答
理解 `std::is_move_constructible`

若类型没有移动构造函数但有接受const T&参数的复制构造函数,则该类型可以满足std::is_move_constructible。例如,在以下代码中: #include <type_traits> struct T { T(const T&) {}...

22得票2回答
如何让g++编译具有移动构造函数的C++11代码?

我似乎无法让g++编译使用移动构造函数的C++11代码。我一直收到这个错误:collin@Serenity:~/Projects/arraylib$ g++ ./t2.cpp ./t2.cpp:10:27: error: expected ‘,’ or ‘...’ before ‘&&...

21得票2回答
为什么复制构造函数和移动构造函数会同时被调用?

请考虑以下代码:#include <iostream> #include <vector> using namespace std; class A { public: A(int) { cout << "int" << endl; ...