参数的初始化 from <>
在 <<Inside The C++ Object Model>>书上 p62页,是关于参数初始化 调用copy constructor 的描述:
void foo(X x0);
下面这样的调用方式:
X xx;
foo(xx);
在编译器实现技术上,有一种策略是导入所谓的暂时性Object,并调用copy constructor 将其初始化,然后将暂时性的object 交给函数。列如前一段程序代码转换如下:
//C++的伪码:
//编译器产生出来的暂时对象
X __temp0;
// 编译器对 copy constructor 的调用
__temp0.X::X(xx);
//重新改写函数调用操作,以便使用上述的暂时对象
foo(__temp0);
这部分能容易理解
但是后面书上的叙述就有些不清楚了:
因为foo的声明 __temp0 临时对象作为参数要bitwise拷贝到x0这个局部实体中,“噢,真讨厌,foo()的声明因而也必须被转化,形式参数必须从原来的一个class X object 改变为一个 class X reference ,象这样:”
void foo (X& x0);
======================================================
我的问题是,参数修改成X& x0 后,上面的临时对象是不是还要生成出来,如果是,那么传入的是临时的对象,比如说这个临时对象是xx对象copy出来的,那末函数中对临时对象的修改,在这个临时对象析构后也就没有意义,但是实际中我们用 foo(xx)是可以修改xx对象的(参数不是const&),前后有些矛盾了;如果说改为void foo(X& x0)不产生临时对象,这样可以解释过去!
望高手指教!