本文共 426 字,大约阅读时间需要 1 分钟。
对于代码:
class B{ public: int data; B(){ data = 0; id = s_i++; cout<<"construct "<按照书上的说法是,先创建局部变量b,然后调用拷贝构造函数将b赋值给临时变量t,函数返回调用b的析构函数, 然后t调用拷贝构造函数赋值给main函数中的b,然后t析构,最后main中的b析构。<
但是编译器会进行优化,编译器“偷偷地”在我们写的creat函数中增加一个参数 B&,然后把 b 的地址传进去(注意,这个时候 b 的内存空间已经存在了,但对象还没有被“构造”,也就是构造函数还没有被调用),然后在函数体内部,直接用 b 来代替原来的“临时对象”,在函数体内部就完成 b 的构造
还可以继续优化,
B creat() { return B(3);}
这将直接构造main中的对象b
有空要好好研究下
转载地址:http://iveti.baihongyu.com/