gpt4 book ai didi

c++ - 是矩形 A = 矩形(3, 4);相当于矩形 A(3,4);?

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

下面是我的代码:

#include <iostream>
using namespace std;

class Rectangle {
int width, height;
public:
Rectangle(int, int);
int area() { return (width * height); }
};

Rectangle::Rectangle(int a, int b) {

width = a;
height = b;
}

int main() {
Rectangle A(3, 4);
Rectangle B = Rectange(3,4);
return 0;
}

我没有为 Rectangle 类定义任何复制构造函数或赋值运算符。

Rectangle B = Rectangle(3, 4); 确实连续做了三件事吗?

  1. 为Rectangle的一个临时变量(我们用tmp表示)分配内存空间,调用Rectangle::Rectangle(3, 4)初始化

  2. 为变量B分配内存空间,用默认构造函数初始化

  3. (按成员方式)使用赋值运算符 Rectangle& operator = (const Rectangle &)

    tmp 复制到 B

这个解释有道理吗?我想我可能理解错了,因为与 Rectangle A(3, 4); 相比,这个过程看起来非常笨拙且效率低下。

有人对此有想法吗? Rectangle A(3,4) 是否等同于 Rectangle A = Rectangle(3, 4);?谢谢!

最佳答案

Is it true that Rectangle B = Rectangle(3, 4); actually does three things in serial?

不,那不是真的,但这并不是你的错:这令人困惑。

T obj2 = obj1 不是赋值,而是初始化

所以您是对的,obj1 将首先创建(在您的情况下,是一个临时的),但是 obj2 将使用复制构造函数,不是默认构造然后分配给。


For Rectangle C = new Rectangle(3, 4);, the only difference is that the memory space of the temporary variable is allocated to the heap instead of stack.

不,它不会编译,但 Rectangle* C 会。这里已经有很多关于动态分配的解释。

关于c++ - 是矩形 A = 矩形(3, 4);相当于矩形 A(3,4);?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44895537/

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