error: use of deleted function ‘std::pair<const int, int>& std::pair<const int, int>::operator=(cons

阅读量: searchstar 2021-02-22 14:23:25
Categories: Tags:
error: use of deleted function ‘std::pair<const int, int>& std::pair<const int, int>::operator=(const std::pair<const int, int>&)’
c[0] = std::make_pair(1, 1);
^
note: ‘std::pair<const int, int>& std::pair<const int, int>::operator=(const std::pair<const int, int>&)’ is implicitly declared as deleted because ‘std::pair<const int, int>’ declares a move constructor or move assignment operator
struct pair
^~~~

完整代码:

#include <iostream>
int main() {
std::pair<const int, int> c[2];
c[0] = std::make_pair(1, 1);
return 0;
}

错误信息里说是因为定义了move constructor or move assignment,显然不对。
其实是因为std::pair<const int, int>里的first是const的,只能在定义的时候赋值,所以就把operator=给delete了。

更改成这样才是对的:

#include <iostream>
int main() {
std::pair<int, int> a[2];
a[0] = std::make_pair(1, 1);
std::pair<const int, int> ret = a[0];
auto retp = reinterpret_cast<std::pair<const int, int> *>(a + 0);

return 0;
}

把存储类型改成std::pair<int, int>,然后要用的时候(比如函数返回值)转化成std::pair<const int, int>,就不怕把first给更改了。

参考文献:
https://stackoverflow.com/questions/5966698/error-use-of-deleted-function