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