gpt4 book ai didi

c++ - 什么时候允许编译器优化复制构造函数

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

<分区>

今天我遇到了一些关于复制构造函数我不太了解的事情。

考虑下一段代码:

#include <iostream>
using namespace std;

class some_class {
public:
some_class() {

}

some_class(const some_class&) {
cout << "copy!" << endl;
}

some_class call() {
cout << "is called" << endl;
return *this; // <-- should call the copy constructor
}
};

some_class create() {
return some_class();
}

static some_class origin;
static some_class copy = origin; // <-- should call the copy constructor

int main(void)
{
return 0;
}

然后在给copy赋值origin的时候调用了copy构造函数,这就说得通了。但是,如果我将拷贝声明更改为

static some_class copy = some_class();

它没有被调用。即使在我使用 create() 函数时,它也不会调用复制构造函数。但是,将其更改为

static some_class copy = some_class().call();

它确实调用了复制构造函数。一些研究解释说,允许编译器优化复制构造函数,这听起来是件好事。直到复制构造函数是非默认的,那么它可能会或可能不会做一些显而易见的事情,对吗?那么什么时候允许编译器优化复制构造函数?

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