12得票6回答
用已创建的对象填充std::vector

我正在尝试使用函数创建的对象填充std::vector:class Foo { public: Foo() { std::cout << "Foo created!\n"; } Foo(const Foo& other) { std::cout <<...

7得票3回答
C++ 程序员通常是显式地进行移动操作还是依靠编译器来自动完成?

我们在某个函数中有这样的代码: BigClass big; // prepare big somehow OtherClass foo(std::move(big), maybe, other, params); // know that we won't be using "big" af...

14得票2回答
从函数返回一个const对象是否会防止外部进行移动构造?

考虑到这些函数和函数调用:std::string GetString() { std::stringstream sstr; const auto str = sstr.str(); return str; } const auto returnedStr = GetString...

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

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

25得票4回答
移动构造函数和 `std::array`

根据N3485 §23.3.2.2的规定: (...) array 的隐式移动构造函数和移动赋值运算符分别要求 T 必须是 MoveConstructible 或 MoveAssignable。 因此,只有当 std::array 的元素类型满足这些条件时,它才支持移动语义。很好! 然而...

30得票5回答
以最高效的方式返回和重置成员变量?

如何最高效地实现以下代码中的GetDeleteObjects方法?class Foo { public: std::vector<Bar> GetDeleteObjects(); private: std::vector<Bar> objects_; } st...

7得票2回答
为什么std::vector使用移动构造函数,尽管声明为noexcept(false)?

无论我在互联网上阅读哪篇文章,都强烈建议如果我希望我的类与std::vector很好地配合(即,std::vector使用了我的类的移动语义),就应该将移动构造函数声明为“noexcept”(或者noexcept(true))。即使作为一项实验,我将其标记为noexcept(false),为什...

15得票1回答
将对象从一个unordered_map移动到另一个容器中

我的问题是关于安全性的。我查阅了cplusplus.com和cppreference.com,它们似乎缺乏在std::move期间迭代器的安全性知识。具体来说,使用已移动的对象的迭代器调用std::unordered_map::erase(iterator)是否安全?示例代码: #inclu...

7得票1回答
堆分配的对象能够移动到栈上吗?

问题 我们能否使用移动语义将堆上分配的对象移到栈上? 示例 #include <boost/asio.hpp> #include <memory> class connection { public: connection(boost::asio::ip...

38得票3回答
C++11:如何编写具有atomic<bool>成员的移动构造函数?

我有一个带有原子成员变量的类:struct Foo { std::atomic&lt;bool&gt; bar; /* ... lots of other stuff, not relevant here ... */ Foo() : bar( false ) {} ...