- 论坛徽章:
- 0
|
C++疑问?关于copy constructor?
根据C++ 标准,上是对的:
default constructor // 定义变量 X a;
calling userCode()
copy constructor // 传递参数,调用 copy constructor;
copy constructor // 初始化 X c = b;
copy constructor // 返回参数.
back in main()
但是在具体编译器实现上, 会有所不同.
大多数编译器,会实现一种 NRV 优化.
(1) 未优化时,可能转化为:
X __temp0;
__temp0.X::X(b); // call copy constructor
void UserCode(X& __result)
{
X __temp1;
__temp1.X::X(temp0); // call copy constructor
__result.X::X(__temp1); // call copy constructor
return;
}
(2) NRV优化, 可能会被转化为以下C++伪代码
X __temp0;
__temp0.X::X(b); // 调用一次 copy constructor
void UserCode(X& __result)
{
__result.X::X(_temp0); // 对返回值调用 copy constructor
return;
}
(3) 对于以上例子,更高明的编译甚至可以这样, 转化 C++ 伪代码
X __result;
__result.X::X(b); // only one copy constructor
void UserCode(void)
{
return;
} |
|