【发布时间】:2021-02-18 09:53:27
【问题描述】:
这里 C() 是一个临时对象,应该使用无参数构造函数创建,然后我希望调用移动构造函数。然而它们都没有发生。谁能解释一下为什么?
#include <iostream>
using namespace std;
class C{
public:
C(){std::cout<<"No arg\n";}
C(const C& r){std:cout<<"Copy Cons\n";}
C(C&& r){std:cout<<"Move Cons\n";}
};
int main() {
C c(C());
}
【问题讨论】:
-
@Nicol 实际上是最麻烦的解析。 OP 的期望仍然是错误的,但他们会合理地期望默认 ctor 至少一次。
-
关闭原因错误(或仅部分错误)。这是最令人头疼的解析。 stackoverflow.com/questions/5926103/most-vexing-parse
-
@Bathsheba 您认为的欺骗目标是否缺少某些东西?
-
@Bathsheba 这很公平,但欺骗目标涵盖了您的答案,对吧?
-
只有 dup 不同,它不是同一类型,但我怀疑差异是否显着
标签: c++ constructor move-constructor temporary-objects