Страницы

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

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

в чем разница между двумя функциями

#cpp


template  struct A
{
   A foo (A, A) {return A();}
   A foo (A,A) {return A();}
};


В чём разница между 2 функциями?
    


Ответы

Ответ 1



Разницы, как таковой, нет. Просто в одном случае шаблонный класс явно параметризован типом T, а в другом - неявно. В этом можно убедиться на соответствующем примере: template struct A { A foo (A, A) {return A();} A foo (A,A) {return A();} }; int main() { A a; a.foo(a,a); } При компиляции будет выведена ошибка: error: class member cannot be redeclared Т.е. компилятор посчитал функции идентичными. При этом использование краткого имени в данном случае предпочтительнее, т.к. не зависит от изменения имени шаблонного параметра или их кол-ва. В Стандарте языка данный момент описан в п.14.6.1/1: Like normal (non-template) classes, class templates have an injected-class-name (Clause 9). [...] is equivalent to the template-name followed by the template-parameters of the class template enclosed in <>.

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

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