我没有得到明确的学术答案,测试证明是犹豫不决的;大多数成员初始化的例子都使用原语,例如
Rectangle::Rectangle (int x, int y) : width(x), height(y) { }
我正在寻找带引用的成员初始化,
Shape::Shape (Rectangle& r) : rect(r) {}
后者是使用默认的复制构造函数(Rectangle)初始化rect(r)还是rect = r
的简短形式?
测试表明我可以使用构造函数,但我无法观察到复制构造函数的相似行为
Shape::Shape (string& str) : rect(str) {}
为此,Rectangle有一个Rectangle:Rectangle(string&)构造函数
答案 0 :(得分:4)
总是在该语法中使用构造函数。它不能分配,因为你只能分配给构造的对象,所以它正在运行一个构造函数而然后分配......放心,语言赢了'做那样的事。
为了帮助说明构造函数和赋值之间的区别...... Rectangle rect = r;
调用构造函数,而不是赋值,尽管它的外观。但是,一旦rect
已经宣布,rect = r;
就是分配。只有在rect
已经存在时才有意义分配,这在该对象的初始构造期间不会发生,因为它还不存在。
此外,在您的测试中,您可能会对Copy Elision.
感到困惑