gpt4 book ai didi

c++ - 调用构造函数的次数以及地址相同的原因

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

源代码:

#include <iostream>
#include <string>

using namespace std;

int counts = 0;

class A {
public:
A() {
cout << ">> A(" << ++counts << ") constructor" << endl;
}
A(const A& a) {
cout << ">> A(" << ++counts << ") copy constructor" << endl;
}
A& operator=(const A& a) {
cout << ">> A(" << ++counts << ") = constructor" << endl;
return *this;
}
};

A get_A()
{
A a1;
cout << "address of a1 = " << &a1 << endl;
return a1;
}

void test_1()
{
A a2 = get_A();
cout << "address of a2 = " << &a2 << endl;
}

int main()
{
test_1();

return 0;
}

输出:

>> A(1) constructor
address of a1 = 0x7fff5296daf8
address of a2 = 0x7fff5296daf8

我的问题:

1。为什么只有一个构造函数被调用?不应该调用赋值构造函数吗?

2。为什么a1和a2的地址一样?

最佳答案

Return Value Optimisation (RVO)是一种编译器优化,它消除了将您在 get_a 中创建的临时对象复制到 test_1 中。这就是两个对象具有相同地址的原因——它们实际上是完全相同的对象。您的编译器正在消除冗余的构造和复制,而只是就地构造结果。

关于c++ - 调用构造函数的次数以及地址相同的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34672687/

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