chapter 29 Writing Efficient C++
- 作者建议将所有class function包括析构函数 但是除了构造函数,都设为virtual的,因为virtual function的开销非常小
- design 和 algrithm 比语言层面的优化重要太多
- 在选择是通过值传递还是引用传递参数时,只有当需要复制该参数且该参数支持move语义时,才使用值传递
- 当参数是父类,传递的是子类时,不能用值传递,否则会造成类切割
- 只有当传递nullptr是需要的时候,才选择指针传参,否则都选择引用传参
- 尽量使用编译器提供的NRVO和RVO,即直接返回局部变量
Person createPerson() {
person p1;
person p2;
return isGood() ? p1 : p2;
}
上述情况不会引起NRVO
Person createPerson() {
person p1;
person p2;
if (isGood()) {
return p1;
} else {
return p2;
}
这种情况可以引起NRVO