求教函数的值传递,编译器为什么修改函数声明?解决方法

求教函数的值传递,编译器为什么修改函数声明?
书:深度探索C++对象模型里有一个例子:

函数声明:void foo( X x0 ); 
然后这样调用:
X xx; 
foo( xx ); 
书里说编译器内部转换为:
X __temp0; 
__temp0.X::X ( xx ); 
foo( __temp0 ); 

最后说这样不行,仍然存在一个问题:函数声明要改变:void foo( X& x0 ); 
原因是临时对象先调拷贝函数,然后》
then is bitwise copied into the local instance of x0!

1》看不懂,这是什么意思?
2》现在的编译器还是这种策略吗?

------解决方案--------------------
原书foo函数有个X类型的返回值吧;这是编译器做得NRV优化;进行拷贝构造后再进行位拷贝到x0中;
现在的编译器只是在某些特殊的情况下有这种策略;
------解决方案--------------------
探讨

对不起,我搞错了。
兄台可不可以为我回答第一个问题?
1》临时对象__temp0先调拷贝函数,然后
then is bitwise copied into the local instance of x0! 这是什么意思?

既然__temp0已经调拷贝函数了,为什么还要位拷贝给local instance of x0?
__temp0不就是local instance of x0吗?

------解决方案--------------------
哈哈,搞了半天这句我理解错了
------解决方案--------------------
引用楼主 damo_xu 的帖子:
书:深度探索C++对象模型里有一个例子:

函数声明:void foo( X x0 );
然后这样调用:
X xx;
foo( xx );
书里说编译器内部转换为:
X __temp0;
__temp0.X::X ( xx );
foo( __temp0 );

then is bitwise copied into the local instance of x0!

1》看不懂,这是什么意思?
大家好像没有明白我的问题:

1》临时对象__temp0先调拷贝函数,然后
then is bitwise copied into the local instance of x0! 这是什么意思?

2》更确切的问:__temp0不就是x0吗?

难道x0是指栈上的,__temp0只是一个临时的东西,但它在哪?

------解决方案--------------------
今天很高兴,学会了收藏,还看到自己熬成长工了,以后我要发50分以上的帖子。
借楼主宝地用一下,同乐同乐! 本想删除L27, L28,L29 愚蠢发言,但编辑不了,就留着算自己的
一个脚印吧。搞乱了这里气氛,不过楼主问题应该解决了吧 ?