如果你的代码工作正常并且表现良好,你可能会想知道为什么还要使用C++ 11。当然了,使用最新的技术感觉很好,但是事实上它是否值得呢?
在我看来,答案毫无疑问是肯定的。我在下面给出了10个理由,它们分为两类:性能优势和开发效率。
一、性能优势
理由1:move语义(move semantics)。简单的说,它是优化复制的一种方式。有时候复制很显然是浪费的。如果你从一个临时的string对象复制内容,简单的复制指向字符缓冲区的指针将比创建一个新的缓冲区再复制要高效得多。我们之所以能做这样,是因为源对象是临时对象,即将析构,所以可以直接利用它的内存空间,挪作他用,省去重新分配内存再进行拷贝的动作,从而提高效率。
然而,在这以前C++并没有判断源对象是不是临时对象的机制。move语义除了支持移动复制操作外,还允许你有一个移动构造函数(move constructor)和一个移动赋值运算(move assignment)符来提供这个机制。
你知道吗?当你在Visual Studio 2010中使用标准库中的类如string或vector时,它们已经支持move语义了。这可以防止不必要的的复制从而改善性能。
通过在你的类中实现move语义你可以获得额外的性能提升,比如当你把它们存储到STL容器中时。