C ++ это и постоянный объект

не могли бы вы сказать мне, почему этот код работает? Есть перегруженный оператор (), который используется replace_if алгоритм. В основной функции я создал постоянный объект класса IsEqual, поэтому следует использовать только постоянный член функции. Каким-то образом постоянство не работает, и этот оператор называется.

#include <iostream>
#include <vector>
#include <algorithm>

class IsEqual {
int value;
public:
IsEqual(int v) : value(v) {}
bool operator()(const int &elem){
this->value=6;
return elem == value;
}
};

int main()
{
const IsEqual tst(2);
std::vector<int> vec = {3,2,1,4,3,7,8,6};
std::replace_if(vec.begin(), vec.end(), tst, 5);
for (int i : vec) std::cout << i << " ";
std::cout<<std::endl;
}

результат: 3 2 1 4 3 7 8 5

6

Решение

std::replace_if сделает свою собственную копию tst объект. Не требуется ограничивать его const,

Если вы хотите использовать исходный объект в алгоритме, вы можете использовать std::reference_wrapper, Поскольку это будет относиться к const объект, это приведет к ошибке компилятора, потому что это потребует, чтобы оператор const:

std::replace_if(vec.begin(), vec.end(), std::ref(tst), 5);
11

Другие решения


По вопросам рекламы [email protected]