- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是我的代码:
#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);
确实连续做了三件事吗?
为Rectangle的一个临时变量(我们用tmp
表示)分配内存空间,调用Rectangle::Rectangle(3, 4)
初始化
为变量B
分配内存空间,用默认构造函数初始化
(按成员方式)使用赋值运算符 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/
我是一名优秀的程序员,十分优秀!