我不明白<C++对象模型内部"中'Argument Initialization'的内容>
I do not understand somethings in 'Argument Initialization' in <Inside The C++ Object Model>
在第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++标准下是合法的。
相关文章:
- C++如何通过"constructor initialization"初始化行变量?
- C++ CRTP initialization
- 如何处理Boost Spirit X3导致Visual Studio 2019 "static initialization order fiasco"?
- 'initialization'到底是什么意思?
- Qt 错误消息"qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed"
- 为什么"an inherited constructor is not a candidate for initialization from an expression of the same or
- "static initialization order fiasco"是 constexpr 变量的问题吗?
- 'default-initialization in copy-initialization context'在C++中是什么意思?
- CUDA 错误:"dynamic initialization is not supported for __device__, __constant__ and __shared__ variabl
- 如何避免"invalid initialization of reference" C++中琐碎函子的错误
- C++ Zero-Initialization
- JNI 失败并显示'Error occurred during initialization of VM'
- 为什么 clang++ 报告与 "value stored to '...' during its initialization is never read" 的结构化绑定?
- 添加新对话框后,MFC 应用程序启动失败并"DLL Initialization Failed"
- std::initializer_list构造函数和"braced initialization"的问题
- 为什么在列表initialization函数参数时,显式构造函数不匹配
- 来自 C# 的 gcc DLL:Windows 10 上的"DLL initialization routine failed"
- CUDA : 错误: 创建推力时"transfer of control bypasses initialization of"::d evice_ptr
- C++, "Error: initialization with '{...}' expected for aggregate object"
- GL_INVALID_ENUM right after context initialization