#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); } Никакой неоднозначности тут нет.
Комментариев нет:
Отправить комментарий