【发布时间】:2015-07-19 01:40:33
【问题描述】:
我有这几行代码:
#include <iostream>
using namespace std;
class A
{
public:
A() noexcept
{
cout << "A::A()" << endl;
}
A(const A&) noexcept
{
cout << "A::A(const A&)" << endl;
}
A(A&&) noexcept
{
cout << "A::A(A&&)" << endl;
}
};
class B
{
public:
B(const A& a) noexcept :
_a(a)
{}
B(A&& a) noexcept :
_a(a)
{}
private:
A _a;
};
int main(int argc, char* argv[])
{
A a;
B b1 = B(a);
B b2 = B(A());
}
他们产生这个输出:
A::A()
A::A(const A&)
A::A()
A::A(const A&)
我需要做什么才能从B::B(A&&) 调用A::A(A&&)?
如您所见,添加 noexcept 并不能解决此问题。
【问题讨论】:
标签: c++ constructor move-semantics