Форум программистов, компьютерный форум CyberForum.ru

Непонятный параметр в шаблоне функции - C++

Восстановить пароль Регистрация
 
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 48
14.09.2013, 11:33     Непонятный параметр в шаблоне функции #1
День добрый!
Приведу пример шаблона функции:
C++
1
template <typename T1> void func(const T1 &val = T1()) {}
Если вызвать функцию со следующим аргументом:
C++
1
func(5);
то он передастся в параметр примерно так: const int &val = int(5). В результате val будет равно 5.
Если вызвать такую функцию (где A - имя класса):
C++
1
func(A(1,2));
то val, я так понял, будет ссылкой на временный объект.

Но какую роль в данном случае играет "= T1()" ? Если рассуждать, как в предыдущем случае, то после передачи получается непонятное "= A(A(1,2))". Если убрать "= T1()", то значение val не изменится.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2013, 11:33     Непонятный параметр в шаблоне функции
Посмотрите здесь:

C++ Ошибка в рекурсивном шаблоне функции
Дружественные функции в классе-шаблоне C++
Конфликт имени функции в шаблоне C++
Вызов функции в шаблоне класса C++
C++ ошибка с типами в шаблоне функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,283
14.09.2013, 11:41     Непонятный параметр в шаблоне функции #2
Роль значения по умолчанию. Т.е. можно скажем написать func<int>(), тогда значение val будет равно 0
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 48
14.09.2013, 11:46  [ТС]     Непонятный параметр в шаблоне функции #3
Voivoid
Это понятно. Я имел ввиду, что происходит с объектом при передачи в такой параметр? Как значение по умолчанию на него влияет?
zenw
154 / 110 / 3
Регистрация: 12.06.2013
Сообщений: 168
14.09.2013, 11:49     Непонятный параметр в шаблоне функции #4
Цитата Сообщение от Paket236 Посмотреть сообщение
Это понятно. Я имел ввиду, что происходит с объектом при передачи в такой параметр? Как значение по умолчанию на него влияет?
Никак не влияет. Значение по умолчанию даже в сигнатуру функции не входит, и используется только если аргумент не указан.
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,283
14.09.2013, 11:50     Непонятный параметр в шаблоне функции #5
Ничего не происходит. Но имея подобное значение по умолчанию можно например делать следующие вызовы функции: func<A>(); это приведет к тому, что в func val будет ссылаться на временный объект типа A сконструированный при помощи дефолтного конструктора
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 48
14.09.2013, 12:00  [ТС]     Непонятный параметр в шаблоне функции #6
Ааа, всё, разобрался. Я просто забыл, что значение по умолчанию срабатывает только когда, когда аргумент не указан.
Спасибо
Yandex
Объявления
14.09.2013, 12:00     Непонятный параметр в шаблоне функции
Ответ Создать тему
Опции темы

Текущее время: 07:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru