《More Effective C++》总结笔记(三)

2021-03-07  本文已影响0人  拉普拉斯妖kk

效率

条款16:谨记80-20法则

条款17:考虑使用lazy evaluation(缓式评估)

条款18:分期摊还预期的计算成本

条款19:了解临时对象的来源

条款20:协助完成“返回值优化(RVO)”

const Rational operator*(const Rational& lhs, const Rational& rhs)
{
    return Rational(lhs.numerator() * rhs.numerator(), lhs.denominator() * rhs.denominator());
}
Rational a = 10;
Rational b(1,2);
Rational c = a * b;

条款21:利用重载技术(overload)避免隐式类型转换(implicit type conversions)

class UPInt { // 这个class用于无限精密的整数
plublic:
    UPInt();
    UPInt(int value);
    ...
};
const UPInt operator+(const UPInt& lhs, const UPInt& rhs);
UPInt upi1, upi2;
...
UPInt upi3 = upi1 + upi2;
upi3 = upi1 + 10;
upi3 = 10 + upi2;
const UPInt operator+(const UPInt& lhs, const UPInt& rhs); // 将UPInt和UPInt相加
const UPInt operator+(const UPInt& lhs, const int& rhs); // 将UPInt和int相加
const UPInt operator+(const int& lhs, const UPInt& rhs); // 将int和UPInt相加
const UPInt operator+(const int& lhs, const int& rhs);

条款22:考虑以操作符复合形式(op=)取代其独身形式(op)

const Rational operator+(const Rational& lhs, const Rational& rhs)
{
    return Rational(lhs) += rhs;
}

条款23:考虑使用其他程序库

条款24:了解virtual functions、multiple inheritance、virtual base classes、runtime type identification的成本

上一篇下一篇

猜你喜欢

热点阅读