50得票1回答
std::array是否可移动?

std::array是否可移动? 在Bjarne Native 2012 presentation slides(第41页)中,它将std :: array列为仅有的不可移动容器之一。 快速查看gcc 4.8库源代码似乎证实了std :: array不可移动: std :: vector...

50得票4回答
在构造函数的初始化列表中,对于通过值传递的重型成员,是否真的需要使用std::move?

最近我阅读了来自cppreference.../vector/emplace_back的一个示例: struct President { std::string name; std::string country; int year; President(s...

49得票5回答
为什么移动指针变量不会将其设置为空?

在实现移动构造函数和移动赋值运算符时,通常会编写以下代码:p = other.p; other.p = 0; 隐式定义的移动操作将使用以下代码实现:p = std::move(other.p); 这是错误的,因为移动指针变量并不会将其设置为 null。为什么呢?是否有任何情况下我们希望移动操作...

48得票2回答
为什么`std::stringstream::stringstream(std::string&&)`不存在?

我希望 stringstream 有一个从 string&& 中窃取其初始内容的构造函数。STL 中通常不存在这种跨类型的“移动构造函数”吗?如果不是,为什么?

47得票6回答
Rust中的移动语义是什么?

在Rust中,有两种可能性可以引用一个值: 1. 借用(Borrow),即引用但不允许修改引用的目标。&运算符从一个值中借用所有权。 2. 可变借用(Borrow mutably),即引用以修改目标。&mut运算符从一个值中可变地借用所有权。 Rust文档对于借用规则的说明如下: 首先...

44得票1回答
常量引用 VS 移动语义

我想知道在C++11之后,仍需要在哪些情况下在参数中使用const引用。我并不完全了解移动语义,但我认为这是一个合法的问题。本问题仅针对一些情况,其中const引用替代了要进行复制但只需要“读取”值的情况(例如使用const成员函数)。 通常我会编写一个(成员)函数如下: #include...

43得票4回答
什么是ref-限定符`const &&`的用处?

我在之前的问题后继续研究了一下引用限定符。 给定下面的代码示例:#include <iostream> #include <string> #include <utility> struct A { std::string abc = "abc"; ...

43得票6回答
如何实际实现五个规则?(这是一个关于IT技术的问题)

更新:请看文末 问题1:如果你想让一个管理重型资源的类能够通过值传递,以简化和美化它的使用,你会如何实现五个规则?或者并不需要所有五项规则吗? 实际上,我正在开始一些关于3D成像的工作,其中图像通常是128*128*128 double。但是,能够编写这样的代码将使数学计算更加容易: U...

42得票2回答
为什么需要在 std::move 之后调用析构函数?

在C++编程语言第四版中,有一个向量实现的示例,在消息末尾查看相关代码。 uninitialized_move()通过将它们从旧内存区域移动到新内存区域来初始化新的T对象。然后它在原始T对象上调用析构函数,即移动自对象。为什么在这种情况下需要调用析构函数? 这是我的不完全理解:移动对象意味...

42得票1回答
为什么在这种情况下Visual Studio不能执行返回值优化(RVO)

我正在回答一个问题并推荐对于大型类型返回值使用按值返回,因为我相信编译器会执行返回值优化(RVO)。但后来有人指出Visual Studio 2013没有在我的代码上执行RVO。 我找到了这里的一个问题,关于Visual Studio无法执行RVO,但在那种情况下,结论似乎是如果真的很重要,...