gpt4 book ai didi

C++ move 语义 : why copy assignment operator=(&) is called instead of move assignment operator=(&&)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:56 31 4
gpt4 key购买 nike

我有以下代码:

#include <cstdio>
#include <iostream>

using std::cout;

struct SomeType {
SomeType() {}

SomeType(const SomeType &&other) {
cout << "SomeType(SomeType&&)\n";
*this = std::move(other);
}

void operator=(const SomeType &) {
cout << "operator=(const SomeType&)\n";
}

void operator=(SomeType &&) {
cout << "operator=(SomeType&&)\n";
}
};

int main() {
SomeType a;
SomeType b(std::move(a));
b = std::move(a);
return 0;
}

我希望 move 构造函数调用 move 赋值运算符。下面是这个程序的输出:

SomeType(SomeType&&)
operator=(const SomeType&)
operator=(SomeType&&)

如您所见, move 赋值运算符已成功调用,但在 move 构造函数内分配给 *this 时未成功调用。为什么会发生这种情况,我能以某种方式解决它吗?

最佳答案

您的 move 构造函数采用 const SomeType&& 而不是 SomeType&&。您不能调用带有 const SomeType&& 类型值的 SomeType&&(您的 move 构造函数)的函数。

尝试制作一个采用SomeType&& 的 move 构造函数。

关于C++ move 语义 : why copy assignment operator=(&) is called instead of move assignment operator=(&&)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19979643/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com