Функция-член с модификатором const.

У меня есть класс с двумя функциями-членами, которые отличаются только 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 версия явно?

1

Решение

Почему вызывается неконстантная доза?

Это по замыслу. Если у вас есть неконстантный объект, неконстантная перегрузка выбирается поверх 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();
}
4

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

Константная версия вызывается только тогда, когда сам объект является константным. Это означает, что вы можете вызвать const версию с этим кодом:

int main(){
const CFoo foo;
cout << CFoo::a << endl;
foo.dosmth();
cout << CFoo::a << endl;
}
3

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