我不明白<C++对象模型内部"中'Argument Initialization'的内容>

I do not understand somethings in 'Argument Initialization' in <Inside The C++ Object Model>

本文关键字:Initialization Argument gt 内部 明白 lt C++ 对象模型      更新时间:2023-10-16

在第2.2章参数初始化一书中
当我们调用具有类对象参数的函数时,编译器将通过复制构造函数构造一个临时对象,使用临时参数来调用函数,并将参数从类对象更改为类引用,如下所示:

void foo( X x0 );   
X xx;   
foo(xx);  
------------------ 
X __temp0;  
__temp0.X::X(xx);   
void foo( X& x0 );  
foo(__temp0);

我不明白编译器为什么要把参数从类X对象改为类X引用?

注意:x86-64的实现细节如下。您的体系结构可能会有所不同。

这是因为参数大多在寄存器中传递,并且没有足够的空间来容纳那里的对象。因此编译器会传递临时引用。它根本不会改变行为,因此在C++标准下是合法的。

相关文章: