#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);
}
Run Code Online (Sandbox Code Playgroud)
当我编译它时,我得到这个错误:const ABC
作为discards限定符的this
参数传递ABC& ABC::setBool(bool)
任何想法为什么会发生这种情况,因为对象本身并不是一个常数.
小智 6
foo通过引用引用vec,你不能改变const.因此要么删除调用setBool的行,要么如果你真的要设置bool,请将参数类型更改为std :: vector&.
或者对实现更加严格......你看,这两个函数存在:
T& vector<T>::operator[](int);
T const& vector<T>::operator[](int) const;
Run Code Online (Sandbox Code Playgroud)
当你在const对象上调用"vec [i]"时,只有第二个有效,所以它被选中.但是这个重载显然会返回T const&,这就是你无法改变的事情.