18得票2回答
按值返回std::vector

常言道,在 C++11 中,通过值返回 std::vector 是合理的。 在 C++03 中,由于 RVO 可以优化掉拷贝操作,这通常是正确的,但是这个“应该”让大多数开发人员感到不安。 在 C++11 中,返回的局部变量 std::vector 是否总是会被移动? 如果该向量是局部变...

8得票1回答
在容器之间移动一系列元素?

我一直在查看C++文档,寻找一种使用移动语义将一系列元素从一个容器移动到另一个容器的函数。然而,我没有找到这样的函数。我错过了什么吗? 如何在不复制和使用显式循环的情况下完成以下操作? // Move 10 elements from beginning of source to end ...

12得票2回答
在C++中,当将通用构造函数赋值给成员变量时,应使用std::move或std::forward?

请考虑以下类foo1和foo2。 template <typename T> struct foo1 { T t_; foo1(T&& t) : t_{ std::move(t) } { } }; templat...

13得票2回答
标准库或编译器在哪些地方使用noexcept移动语义(除了向量增长之外)?

移动操作应该是 noexcept 的;首先是为了直观和合理的语义,其次是为了运行时性能。根据《核心指南》(C.66),“使移动操作成为 noexcept”: 抛出异常的移动违反了大多数人的合理假设。标准库和语言工具将更有效地使用非抛出移动。 这个指南中性能方面的典型例子是当 std::ve...

17得票2回答
在模式匹配过程中防止移动语义

我这里有一个愚蠢的例子,只是为了演示我在使用另一个库和模式匹配时遇到的问题。 struct Person { name: String, age: i32, choice: Choices } #[derive(Debug)] enum Choices { ...

7得票3回答
如何返回一个fstream(C++0x)

我想直接开始编码: #include <iostream> #include <fstream> #include <string> class test : public std::ofstream { public: test...

15得票2回答
编译器何时应该生成移动构造函数?

我使用VS11并使用以下内容:class ContextWrapper { public: ContextWrapper() { } //it should be defaulted I *guess* in order to have automatic move ...

33得票4回答
C++中的“移动”语义使用是否正确?

今晚我一直在查看我最近几天工作的一些代码,并开始阅读移动语义,具体来说是std::move。我有几个问题要问你们专家,以确保我走在正确的道路上,不做任何愚蠢的假设! 首先: 1) 最初,我的代码有一个返回大型向量的函数:template<class T> class MyObj...

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

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

28得票2回答
移动一个lambda:一旦你已经move-capture了一个只能移动的类型,lambda如何使用?

这个答案解释了如何在C++14中在lambda中移动捕获变量。 但是一旦你在lambda中移动捕获了一个不可复制的对象(比如std::unique_ptr),你就不能复制lambda本身。 如果你可以移动lambda,那就没问题了,但是当我尝试这样做时,会出现编译错误: using na...