07
FEB
C++中的移动语义和完美转发
在C++中,对象默认都是值语义,比如在对象A里面定义了成员变量B和C,那么B和C会被直接放在A的内存空间里,这样做的优点是保证了内存访问的局部性,这在现代处理器架构上具有绝对的性能优势。但缺点是,在对象复制时,具有很大的开销。而在Java或者C#里面,默认存储的是引用或者说是指针。因为C++存储完整对象这个特性,而这会导致大的复制开销,所以C++需要移动语义这一优化,而在Java或者C#中则根本不需要这一概念。一句话总结就是,移动语义使得C++里返回大对象(比如容器)的函数和运算符的性能得到极大提高。 …