Информация об изменениях

Сообщение Re: перегрузка или специализация? от 06.05.2020 8:39

Изменено 06.05.2020 8:44 rg45

Re: перегрузка или специализация?
Здравствуйте, niXman, Вы писали:

X>привет!


X>возник такой теоритический вопрос: чем в данном случае являются пункты 2 и 3, и является ли 3 перегрузкой 2?

X>
X>template<typename T>
X>T sum(const T *beg, const T *end); // 1

X>int sum(const int *beg, const int *end); // 2

X>double sum(const double *beg, const double *end); // 3
X>



Все три варианта, включая шаблонный, являются перегрузками по отношению друг к другу. Вот если ты добавишь template<> перед вариантами 2 и 3, тогда они станут специализациями.

P.S. Есть простой способ проверки — меняешь тип возвращаемого результата так, чтоб он противоречил primary template declaration. Если компилятор не возражает, значит перегрузка, а если выдал ошибку, то по тексту ошибки должно быть все понятно
Re: перегрузка или специализация?
Здравствуйте, niXman, Вы писали:

X>привет!


X>возник такой теоритический вопрос: чем в данном случае являются пункты 2 и 3, и является ли 3 перегрузкой 2?

X>
X>template<typename T>
X>T sum(const T *beg, const T *end); // 1

X>int sum(const int *beg, const int *end); // 2

X>double sum(const double *beg, const double *end); // 3
X>



Все три варианта, включая шаблонный, являются перегрузками по отношению друг к другу. Вот если ты добавишь template<> перед вариантами 2 и 3, тогда они станут специализациями.

P.S. Есть простой способ проверки — меняешь тип возвращаемого значения так, чтоб он противоречил primary template declaration. Если компилятор не возражает, значит перегрузка, а если выдал ошибку, то по тексту ошибки должно быть все понятно