【发布时间】:2021-07-21 17:40:06
【问题描述】:
我可以使下面的代码在不复制对象 b 的情况下工作吗?
#include <iostream>
using namespace std;
class A{
public:
A() = default;
A(const A& a) { cout << "copy ctor\n"; }
A(A&& a) { cout << "move ctor\n"; }
A& operator=(const A& a) { cout << "copy\n"; return *this;}
A& operator=(A&& a) { cout << "move\n"; return *this;}
};
A Gen() {
A x;
return x;
}
int main() {
bool cached = true;
const A b;
const A& a = cached ? b : Gen();
}
似乎当cached 为真时,就会调用复制ctor。
*编辑:在实际代码中,A类有点大,所以我想避免复制。
*编辑 2:我将 b 设为常量,以阐明意图。
【问题讨论】:
-
我可以想办法做到这一点,这样当
cached为假时,只会调用移动构造函数。 -
@SamVarshavchik 怎么样?
-
这能回答你的问题吗?
-
@SamVarshavchik 是的,有问题的部分是当
cached变为真时b被复制。
标签: c++