Страницы

Поиск по вопросам

суббота, 21 декабря 2019 г.

Вызов константного или не константного метода

#cpp #ооп


Предположим есть код:

class Example {
public:
    void SomeMetod() {
        cout << "non const method called" << endl;
    }

    void SomeMetod() const {
        cout << "const method called" << endl;
    }
};

int main() {
    const Example ex1;
    ex1.SomeMetod();

    Example ex2;
    ex2.SomeMetod();

    return 0;
}


Два методы перегруженные по константности. Так как сигнатуры методов одинаковые,
почему не возникает неопределенность вызова.
    


Ответы

Ответ 1



Сигнатуры методов - разные. Константность метода класса является частью его сигнатуры. 1.3.20 [defns.signature.member] signature [class member function] name, parameter type list (8.3.5), class of which the function is a member, cv-qualifiers (if any), and ref-qualifier (if any) В процессе overload resolution константность/неконстантность метода выливается в константность/неконстантность скрытого параметра this, наличествующего у каждого нестатического метода класса. Таким образом с точки зрения overload resolution ситуация интерпретируется как // Заменим на обычные функции void SomeMetod(const Example *this_); void SomeMetod(Example *this_); int main() { const Example ex1; SomeMetod(&ex1); Example ex2; SomeMetod(&ex2); } Никакой неоднозначности тут нет.

Комментариев нет:

Отправить комментарий