У меня есть класс с двумя функциями-членами, которые отличаются только const
модификатор.
class CFoo
{
private:
int x;
int y;
public:
static int a;
void dosmth() const {
a = 99;
}
void dosmth(){
x++;
y++;
}
};
int CFoo::a = 100;
int main(){
CFoo foo;
cout << CFoo::a << endl;
foo.dosmth();
cout << CFoo::a << endl;
}
Следующий код печатает 100, 100
, Почему вызывается неконстантная доза? Как я могу позвонить const
версия явно?
Почему вызывается неконстантная доза?
Это по замыслу. Если у вас есть неконстантный объект, неконстантная перегрузка выбирается поверх const
один.
Как я могу назвать версию const явно?
Вам нужен контекст, где ваш объект const
, Например,
void dofoo(const Foo& f) { f.dosmth(); }
int main()
{
CFoo foo;
dofoo(foo);
cout << CFoo::a << endl;
или же
int main()
{
const CFoo foo1{};
foo1.dosmth();
CFoo foo2;
const_cast<const CFoo&>(foo2).dosmth();
}
Константная версия вызывается только тогда, когда сам объект является константным. Это означает, что вы можете вызвать const версию с этим кодом:
int main(){
const CFoo foo;
cout << CFoo::a << endl;
foo.dosmth();
cout << CFoo::a << endl;
}