gpt4 book ai didi

c++ - 为什么不调用复制构造函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:06 25 4
gpt4 key购买 nike

class MyClass
{
public:
~MyClass() {}
MyClass():x(0), y(0){} //default constructor
MyClass(int X, int Y):x(X), y(Y){} //user-defined constructor
MyClass(const MyClass& tempObj):x(tempObj.x), y(tempObj.y){} //copy constructor

private:
int x; int y;
};

int main()
{
MyClass MyObj(MyClass(1, 2)); //user-defined constructor was called.
MyClass MyObj2(MyObj); //copy constructor was called.
}

在第一种情况下,当 MyClass(1, 2) 调用用户定义的构造函数并返回一个对象时,我期望 MyObj 调用复制构造函数。为什么它不需要为 MyClass 的第二个实例调用复制构造函数?

最佳答案

每当创建临时对象的唯一目的是复制并随后销毁时,允许编译器完全删除临时对象并直接在接收者中构造结果(即直接在应该接收对象的对象中)复制)。在你的情况下

MyClass MyObj(MyClass(1, 2));

可以转化为

MyClass MyObj(1, 2);

即使复制构造函数有副作用。

此过程称为复制操作省略。它在语言标准中的 12.8/15 中有描述。

关于c++ - 为什么不调用复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47960154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com