我和我的一位同事讨论过关于他人的问题
Pt pt;
和
Pt pt = Pt();
是等价的。我怀疑在第二种情况下可以调用复制作业,但事实证明并非如此。
当我们进行我们的小实验时,我决定测试一个奇怪的位,我的同事认为甚至无法编译:
//here the compiler calls a copy constructor and doesn't call the default constructor prior to that
// O_o
Pt pt = pt;
以下是工作示例:http://ideone.com/XmJSz7
所以,问题是 - 发生了什么:
Pt pt = pt;
答案 0 :(得分:5)
像type object = something
之类的构造调用复制构造函数,而不是赋值运算符
考虑到这一点,以下是发生的事情:
Pt pt =
- >此时,创建了Pt
个对象,名为pt
(此时没有任何内容被初始化)= pt;
- >此时,使用参数调用pt
的复制构造函数 - 本身(pt
)pt
但未初始化(在1.
中),这是(有点)有效 - pt
的复制构造函数(在2.
中)将是“正确地“执行”,将现有的未初始化的对象pt
(再次来自1.
)视为右侧参数很快 - 这很糟糕。
值得注意的是,如果pt
对象是全局或静态的,那么 将在步骤1.
默认初始化 - 在到达=
之后
编辑:关于最初的“谜题”Pt pt = Pt();
,您可以看到此问题:Is there a difference in C++ between copy initialization and direct initialization?及其接受的答案。
这一点似乎也很有趣:How variable is initialized by default constructor in c++