gpt4 book ai didi

c++ - 复制构造函数返回临时对象

转载 作者:行者123 更新时间:2023-11-30 01:43:28 25 4
gpt4 key购买 nike

我在准备关于复制构造函数的讲座时发现了这个:

MyClass myFunction()
{
MyClass mc;
return mc;
}

声明说:

If we call myFunction, then C++ will create a new myClass object that's initialized to mc when myFunction returns. Thus while your code might act like it's transparently moving the object from inside of myFunction to the rest of your code, it's actually making a temporary copy.

我认为语句 MyClass mc;将创建对象并返回表单函数而不是任何临时对象。我哪里错了?有人可以详细说明该声明以便于理解吗?

最佳答案

I think statement MyClass mc; will create the object

正确。

and it returned form function not any temporary object.

我不完全理解你的说法,所以我无法判断你是否做错了,但情况是这样的:

mc 是局部变量。局部变量在函数退出时被销毁。在它被销毁之前,一个临时对象是从它复制初始化的。然后从函数返回临时对象。

额外知识 1:从 C++11 开始,如果可能的话,临时对象通过move 进行复制初始化。

额外知识 2:标准明确允许编译器跳过复制/移动,而是在调用站点构造对象。这种优化称为(命名)返回值优化,是一种复制省略形式。尽管如此,您不能返回既不可复制也不可移动的对象。这是因为执行 NRVO 不需要 C++ 的实现。

关于c++ - 复制构造函数返回临时对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37729043/

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