#include "iostream"
#include "vector"
class ABC {
private:
bool m_b;
public:
ABC() : m_b(false) {}
ABC& setBool(bool b) {
m_b = b;
return *this;
}
bool getBool() const {
return m_b;
}
};
void foo(const std::vector<ABC> &vec) {
vec[0].setBool(true);
}
int main(int argc, char*argv[]) {
std::vector<ABC> vecI;
ABC i;
vecI.push_back(i);
foo(vecI);
}
当我编译它,我得到这个错误:传递const ABC
作为ABC& ABC::setBool(bool)
丢弃预选赛编译器错误改变非const对象
任何想法,为什么会发生这种事this
论点,因为该对象itelf不是不变。
要添加一些细节,矢量有两个operator [],一个非const的返回一个引用,一个const返回一个const引用。因为你的向量是通过const引用传递的,所以编译器选择const运算符[],所以setBool在const ABC(引用)上被调用。 – 2009-01-06 21:13:47