今天我决定尝试用另外一种方式来表达,任何新语法的的产生都是为了解决某个问题,所以今天先看问题。
1 | class myStr |
执行下面的代码
1 | myStr ss("000"); |
下面的代码是唯一不同的实现,但是却带来30-40%的性能差距。
1 | / friend myStr operator+(const myStr& x, const myStr& y) |
再找一个例子
1 | class MemoryBlock |
执行下面的代码
1 | const long long max = 100000; |
如果把MemoryBlock c = std::move(a)换成MemoryBlock c = a;
性能上大概也有30%的差距。
这就是右值引用和移动构造语义带来的好处,我理解就是以前只能引用左值,而右值是不能引用的,新语法的加入实现了右值的引用,减少了零时对象的产生销毁,但是也带来了更多怪异的语法,明显增加了c++的学习成本,如果语法设计角度,像oc一样增加类似引用计数器来管理对象,会不会更加优雅一下,至少让上层的码农不会那么累,其实通智能指针也能达到同样的效果。
这么多年了c++都在做加法,让学习,使用成本太高了,标准委员为的大爷些什么时候考虑一下做点减法呢,不要让c++那么学院派或者满地都是陷阱,也不要让实现一种技术有10种方法,但是有5种都是陷阱。靠!