122得票8回答
我可以对一个移动语义类型的向量使用列表初始化吗?

如果我在GCC 4.7快照中使用以下代码,则它会尝试将unique_ptr复制到向量中。#include <vector> #include <memory> int main() { using move_only = std::unique_ptr<...

111得票3回答
当向量增长时如何强制使用移动语义?

我有一个特定类别 A 的对象 std::vector。该类别是非平凡的,具有定义的复制构造函数 和 移动构造函数。std::vector<A> myvec; 如果我使用myvec.push_back(a)向vector中添加A对象,它的大小会增长,并使用复制构造函数A( cons...

110得票2回答
C++11中使用std::move的push_back()与emplace_back()对于已构造对象的效率比较。

在C++11中,emplace_back()通常比push_back()更受欢迎(就效率而言),因为它允许原地构造。但是,当使用已经构造的对象时,如果使用push_back(std::move()),是否仍然如此? 例如,在以下情况下,emplace_back()是否仍然优先考虑? std...

105得票3回答
重复使用已移动的容器?

重用已移动容器的正确方法是什么?std::vector<int> container; container.push_back(1); auto container2 = std::move(container); // ver1: Do nothing //container2...

105得票3回答
按值传递还是按引用传递std::string

可能是重复问题: 传递const std :: string&作为参数的时代已经过去了吗? 如果支持移动语义,我应该通过值还是引用(传递给未内联函数)传递std :: string?对于使用小字符串优化(SSO)的实现呢?

103得票4回答
为什么我们需要先复制再移动文件?

我在某个地方看到了一些代码,其中有人决定复制一个对象,并随后将其移动到类的数据成员中。这让我感到困惑,因为我认为移动的整个目的是避免复制。下面是示例:struct S { S(std::string str) : data(std::move(str)) {} }; 这是我的问...

93得票4回答
为什么在C++11标准的早期草案中没有默认的移动赋值/移动构造函数?

我是一个简单的程序员。我的类成员变量通常由POD类型和STL容器组成。因此,我很少需要编写赋值运算符或复制构造函数,因为这些默认已经实现了。 此外,如果我对不可移动的对象使用std::move,它会利用赋值运算符,这意味着std::move是完全安全的。 作为一个简单的程序员,我希望利用移...

89得票1回答
默认的移动构造函数是否被定义为noexcept?

似乎在重新分配元素时,向量会检查移动构造函数是否被标记为noexcept,然后决定是移动还是复制元素。默认的移动构造函数被定义为noexcept吗?我看到了下面的文档,但它没有指定这一点。http://en.cppreference.com/w/cpp/language/move_constr...

86得票7回答
传值后移的构造是一个糟糕的习惯吗?

由于C++中具有移动语义,现在通常这样做void set_a(A a) { _a = std::move(a); } 如果a是rvalue,推断是复制将被省略,并且只会进行一次移动。 但是如果a是lvalue会发生什么?似乎会进行一个复制构造,然后再进行一个移动赋值(假设A拥有适当的移动赋值...

85得票2回答
unique_ptr在移动后保证存储nullptr吗?

unique_ptr在移动后是否保证存储nullptr?std::unique_ptr<int> p1{new int{23}}; std::unique_ptr<int> p2{std::move(p1)}; assert(!p1); // is this alway...