我知道 C++ 11 引入了新的移动语义,并且随着数据容器的更改以满足语言的新定义和规范,我并没有真正了解标准容器如何从中受益。
此外,我认为我已经了解了 Rvalue 是什么以及移动语义如何起作用,问题是我没有看到任何有用的观点,移动事物和更改它们的标签听起来不像是一个有意义的功能。
我可以要求一个很好的资源来了解map, list, vector, ...
新的 C++11 的变化?
我知道 C++ 11 引入了新的移动语义,并且随着数据容器的更改以满足语言的新定义和规范,我并没有真正了解标准容器如何从中受益。
此外,我认为我已经了解了 Rvalue 是什么以及移动语义如何起作用,问题是我没有看到任何有用的观点,移动事物和更改它们的标签听起来不像是一个有意义的功能。
我可以要求一个很好的资源来了解map, list, vector, ...
新的 C++11 的变化?
您可以在cppreference查看容器的描述,其中解释了 STL 的接口。在那里,您可以找到 C++11 标准添加的内容 - 它标有 ' (since C++11)
' 标记。如果单击容器类型,它将显示哪些方法是新的。
引入 RValues 和 LValues 的原因是移动对象数据比对其执行复制要快得多。性能提升主要是因为内部存储的指针在移动期间不需要复制,否则会涉及不必要的 malloc 调用和 memcpys。例如,std::string
包含一个指向char
可能非常大的数组的指针。复制它将涉及复制该char
数组中的数据,移动仅涉及复制指向该数据的指针。
关于 LValues 和 RValues,据我所知,唯一改变的是现在我们有一个闪亮的新构造函数可以使用,并且许多成员函数已被重写以利用移动语义。
例如,std::vector
现在有一个std::vector::vector(std::vector&& move)
ctor,并且类似的函数push_back
已更改为也接受 RValues。
在大多数情况下,这对您来说应该是无懈可击的。如果您正在编写一个库,而不仅仅是使用一个库,您需要知道这一点,以及 URefs。