【发布时间】:2018-08-24 18:50:04
【问题描述】:
所以我是移动语义的新手,我正在测试以下代码。我的理解是右值将调用移动构造函数,我预计 A("123") 将导致调用移动构造函数。但是当我运行它时,会调用复制构造函数。
#include <string>
#include <iostream>
#include <utility>
class A
{
std::string s;
public:
A(const std::string& in) : s(in) { std::cout << "ctor!\n";}
A(const A& o) : s(o.s) { std::cout << "move failed!\n"; }
A(A&& o) noexcept : s(std::move(o.s)) { }
};
class B
{
A d_a;
public:
B(const A& a) :d_a(a)
{}
};
int main()
{
std::cout << "Trying to move A\n";
B b(A("123")); // move-constructs from rvalue temporary
}
【问题讨论】:
-
请在此处提问时始终包含使您的代码可编译所需的头文件。
-
@πάνταῥεῖ 我不同意这个骗局并重新开放。 OP 的构造函数使用左值调用
A的构造函数。
标签: c++