gpt4 book ai didi

c++ - 为什么在 C++ 中分配对象的地址不会改变?

转载 作者:行者123 更新时间:2023-12-03 06:52:39 25 4
gpt4 key购买 nike

在这个 C++ 示例中,一个类 C有一个默认构造函数、一个复制构造函数和一个赋值运算符:

struct C {
C();
C(const C& c);
C& operator=(const C& c);
};
实现如下,带有一些用于跟踪对象的输出。我在注释中添加了一些示例地址作为对 main 的引用。下面的程序。
#include "C.h"
#include <iostream>
using namespace std;

C::C() {
cout << "Standard constructor." << endl;
}

C::C(const C& c) {
cout << "Copy constructor." << endl;
}

C& C::operator=(const C& c) {
cout << "Address of reference argument: &c = " << &c << endl; // F9B4
cout << "Address of this: &*this = " << &*this << endl; // F8D4
return *this;
}
我将使用返回匿名对象的工厂方法:
C foo() {
return C();
}
现在在下面的程序中,我创建了一个命名对象 c (参见(1))并创建一个匿名对象(2),我将其分配给 c (3).我预计 c然后有赋值后匿名对象的地址。
int main()
{
C c; // (1)
cout << "Address of initial c from main: &c = " << &c << endl; // F8D4
c=foo(); // (2) and (3)
cout << "Address of initial c from main after assignment: &c = " << &c << endl; // Expected F9B4 but is F8D4
}

最佳答案

C++ 中的对象永远不会改变地址。
赋值运算符与任何其他方法没有什么不同,通常它只是遍历所有成员变量并为它们分配新值,从其他对象的相应成员复制。

关于c++ - 为什么在 C++ 中分配对象的地址不会改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64636326/

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