【发布时间】:2026-01-03 20:30:02
【问题描述】:
给定类:
class C
{
public:
C()
{
cout << "Dflt ctor.";
}
C(C& obj)
{
cout << "Copy ctor.";
}
C(C&& obj)
{
cout << "Move ctor.";
}
C& operator=(C& obj)
{
cout << "operator=";
return obj;
}
C& operator=(C&& obj)
{
cout << "Move operator=";
return obj;
}
};
然后在 main:
int main(int argc, char* argv[])
{
C c;
C d = c;
C e;
e = c;
return 0;
}
正如您将从输出中看到的那样,调用了“常规”版本的复制 ctor 和 operator=,但没有调用具有右值参数的那些。所以想问一下move ctor和operator=(C&&)在什么情况下会被调用?
【问题讨论】:
标签: c++ constructor c++11