-1

我知道 C++ 11 引入了新的移动语义,并且随着数据容器的更改以满足语言的新定义和规范,我并没有真正了解标准容器如何从中受益。

此外,我认为我已经了解了 Rvalue 是什么以及移动语义如何起作用,问题是我没有看到任何有用的观点,移动事物和更改它们的标签听起来不像是一个有意义的功能。

我可以要求一个很好的资源来了解map, list, vector, ...新的 C++11 的变化?

4

2 回答 2

3

您可以在cppreference查看容器的描述,其中解释了 STL 的接口。在那里,您可以找到 C++11 标准添加的内容 - 它标有 ' (since C++11)' 标记。如果单击容器类型,它将显示哪些方法是新的。

于 2012-11-19T06:43:26.663 回答
3

引入 RValues 和 LValues 的原因是移动对象数据比对其执行复制要快得多。性能提升主要是因为内部存储的指针在移动期间不需要复制,否则会涉及不必要的 malloc 调用和 memcpys。例如,std::string包含一个指向char可能非常大的数组的指针。复制它将涉及复制该char数组中的数据,移动仅涉及复制指向该数据的指针。

关于 LValues 和 RValues,据我所知,唯一改变的是现在我们有一个闪亮的新构造函数可以使用,并且许多成员函数已被重写以利用移动语义。

例如,std::vector现在有一个std::vector::vector(std::vector&& move)ctor,并且类似的函数push_back已更改为也接受 RValues。

在大多数情况下,这对您来说应该是无懈可击的。如果您正在编写一个库,而不仅仅是使用一个库,您需要知道这一点,以及 URefs。

于 2012-11-19T06:51:34.250 回答