C++ this 和常量对象
C++ this and constant object
你能告诉我为什么这段代码有效吗? replace_if
算法使用了重载的 operator() 。在 main 函数中,我创建了 IsEqual class 的常量对象,因此只应使用常量函数成员。不知何故,恒定性不起作用,调用了该运算符。
#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
std::replace_if
将创建自己的 tst
对象副本。不需要限制为const
.
如果你想在算法中使用原始对象,你可以使用一个std::reference_wrapper
。由于它将引用 const
对象,这将导致编译器错误,因为它要求运算符为 const
:
std::replace_if(vec.begin(), vec.end(), std::ref(tst), 5);
你能告诉我为什么这段代码有效吗? replace_if
算法使用了重载的 operator() 。在 main 函数中,我创建了 IsEqual class 的常量对象,因此只应使用常量函数成员。不知何故,恒定性不起作用,调用了该运算符。
#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
std::replace_if
将创建自己的 tst
对象副本。不需要限制为const
.
如果你想在算法中使用原始对象,你可以使用一个std::reference_wrapper
。由于它将引用 const
对象,这将导致编译器错误,因为它要求运算符为 const
:
std::replace_if(vec.begin(), vec.end(), std::ref(tst), 5);