‘pair::operator=type’ is deleted
时间: 2024-01-07 08:05:36 浏览: 101
shell脚本报错:"[: =: unary operator expected"解决办法
5星 · 资源好评率100%
这个错误通常是由于试图使用pair类型进行赋值操作,而pair的operator=被删除所致。
在C++11之前,pair类型是没有默认的移动构造函数和移动赋值运算符的,因此,当使用pair类型进行赋值操作时,会调用默认的拷贝构造函数和拷贝赋值运算符。但是,在C++11中,为了支持移动语义,pair类型添加了默认的移动构造函数和移动赋值运算符。由于移动构造函数和移动赋值运算符是对右值引用进行操作的,因此,当试图使用一个左值来进行pair类型的赋值操作时,编译器会拒绝这个操作,因为这个操作可能会导致数据的不必要的复制。
解决这个问题的方法是,使用移动语义进行pair类型的赋值操作,即使用std::move函数将右值引用转换为左值引用。例如:
```
std::pair<int, int> p1(1, 2);
std::pair<int, int> p2(3, 4);
p1 = std::move(p2); // 使用移动语义进行赋值操作
```
在这个例子中,p1和p2都是pair<int, int>类型的对象。通过使用std::move函数,将p2转换为右值引用,然后使用移动赋值运算符,将p2的值移动到p1中。这样,就可以避免使用pair类型的拷贝赋值运算符,从而避免了‘pair::operator=type’ is deleted错误。
阅读全文