《More Effective C++》的学习

引用与指针 

没有所谓的null reference

reference一定需要代表某个对象,所以C++要求reference必须有初值。

    QString &s;

 

使用reference可能比使用pointer更高效。

因为reference一定是有效的,而指针可能为空(需要多加一个判断)。

指针可以被重新赋值,指向另一个对象,而引用总是指向初始化时的那个对象。

------

旧式的C转型方式:几乎允许你将任何类型转换为任何其他类型。

pointer-to-const-object ---> pointer-to-non-const-object

改变对象的常量性

---

static_cast基本上和C旧式转型有相同的威力,限制。

strcut--->int 不可以

double--->pointer 不可以

移除表达式的常量性  不可以

---

const_cast

改变表达式中的常量性和变易性

可以将某个变量的常量性去除。

---

C++中真正的临时对象是不可见的---不会在源代码中出现。

只要产生了一个non-heap object,没有命名,就产生了一个临时对象。

void test(const std::string & str)
{

}
    char buffer[10];
    test(buffer);

从char数据--->const string &

此时类型是不吻合的,编译器此时会产生一个类型为string的临时对象。

一个临时对象的构造和析构,有其非必要的成本。

---

如果对象被传递给一个reference-to-non-const参数,并不会发生此类转换。

编译器会阻止的。

void test(std::string & str)
{

}
    char buffer[10];
    test(buffer);

思考:因为如果此时产生了一个临时变量string,那么,在函数中如果改变它的值,对buffer是没有影响的,这就违背了我们编写该函数的目的。

---

函数返回一个对象时,会产生临时对象。

此时我们应该做的是,努力降低返回对象的成本。

存在一种特殊写法,在函数返回对象时,可以让编译器消除临时对象的成本 ,就是返回constructor arguments来取代对象。

这样还是会产生临时对象。

但编译器不需要产生“函数内的临时对象”和“函数返回的临时对象”,它们可以将return表达式定义的对象构造于c的内存中。此时没有任何临时变量被产生出来。

const reational operator*(const reational& lhs,const reational& rhs)
{
    return reational(lhs.num()*rhs.num(),lhs.count()*rhs.count());
}

rational a = 10;
rational b(1,2);
retional c = a * b;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lpl还在学习的路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值