我是如何明白C++的move semantics(右值引用)和perfect forwarding(完美转发)的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我是如何明白C++的move semantics(右值引用)和perfect forwarding(完美转发)的相关的知识,希望对你有一定的参考价值。

其实主要就是三篇文章(博客):

首推这篇。

                                    http://thbecker.net/articles/rvalue_references/section_01.html

从这里你可以知道什么时候你会知道,什么时候能够 “链式地” 调用移动构造函数而什么时候不能 ,明白其中过程(特别是什么时候不能)的一些细微差别,你就差不多懂什么是move semantic了。

然后是scott meyers的Universal Reference In C++11:

                                     https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers

当作是第一篇的补充说明吧。如果你还有些疑惑,或者将信将疑,那么这篇可以让你印证你的想法。

然后是2002年的一篇关于move semantic的C++提案:

                                     http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1377.htm

从这里你可以知道,原来move semantics只对那些大的对象才有意义,对于内置类型(如int),move和copy没有区别的("down to the machine instructions")。(知道这个对我来说真的很重要,因为知道在最底层,对于内置类型,如int,move和copy是没有啥区别的,多多少少打消了std::move()的神秘色彩)

第一篇和第三篇都有讲到perfect forwarding。衍生物嘛。

 

也可以看看scott meyers在2013年的一个演讲,关于universal reference的,讲得很好(scott meyers 这是天生段子手啊):

                                   https://channel9.msdn.com/events/GoingNative/2013/An-Effective-Cpp11-14-Sampler(应该是这个了吧...网速太慢打不开来看)

最后,当然可以看看stackoverflow上面的东西:

                                    http://stackoverflow.com/questions/3106110/what-are-move-semantics

(从这里你不仅可以了解move sematics,还可以知道一下什么事copy and swap technique(rule of three).

 

以上是关于我是如何明白C++的move semantics(右值引用)和perfect forwarding(完美转发)的的主要内容,如果未能解决你的问题,请参考以下文章

C++11:移动语义Move Semantics和完美转发Perfect Forwarding

C++11:移动语义Move Semantics和完美转发Perfect Forwarding

C++11:移动语义Move Semantics和完美转发Perfect Forwarding

move semantic/ r-value /L-value (copy from stakcoverflow)

(译)C++11中的Move语义和右值引用

用spacemacs打造c++ IDE