2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 78
1

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

14.09.2013, 11:33. Показов 508. Ответов 5
Метки нет (Все метки)

День добрый!
Приведу пример шаблона функции:
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 не изменится.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2013, 11:33
Ответы с готовыми решениями:

Как принять параметр-итератор в шаблоне функции?
Добрый день, знатоки! Чтобы набить руку, затеял наследование от класса std::vector. template...

Непонятный Параметр Реквизита
В Конфигураторе у реквизита Документа типа &quot;СправочникСсылка&quot; есть такой параметр &quot;Параметры...

Непонятный параметр в POST запросе
Посылается запрос на URL типа...

ЭЦП со сложностью дискретного логарифмирования. Непонятный параметр q. Молдовян
Реализовал схему с проверочным уравнением {a}^{k}{y}^{H(S{a}^{k}mod p)}\equiv S mod p, где...

5
710 / 282 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
14.09.2013, 11:41 2
Роль значения по умолчанию. Т.е. можно скажем написать func<int>(), тогда значение val будет равно 0
0
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 78
14.09.2013, 11:46  [ТС] 3
Voivoid
Это понятно. Я имел ввиду, что происходит с объектом при передачи в такой параметр? Как значение по умолчанию на него влияет?
0
154 / 110 / 9
Регистрация: 12.06.2013
Сообщений: 168
14.09.2013, 11:49 4
Цитата Сообщение от Paket236 Посмотреть сообщение
Это понятно. Я имел ввиду, что происходит с объектом при передачи в такой параметр? Как значение по умолчанию на него влияет?
Никак не влияет. Значение по умолчанию даже в сигнатуру функции не входит, и используется только если аргумент не указан.
1
710 / 282 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
14.09.2013, 11:50 5
Ничего не происходит. Но имея подобное значение по умолчанию можно например делать следующие вызовы функции: func<A>(); это приведет к тому, что в func val будет ссылаться на временный объект типа A сконструированный при помощи дефолтного конструктора
2
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 78
14.09.2013, 12:00  [ТС] 6
Ааа, всё, разобрался. Я просто забыл, что значение по умолчанию срабатывает только когда, когда аргумент не указан.
Спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2013, 12:00
Помогаю со студенческими работами здесь

Непонятный вызов функции
Добрый вечер, товарищи! Что это за вызов такой? Как это работает?

Непонятный аргумент функции
Кто-нибудь может подсказать, что принимает такая функция в качестве аргумента? void foo(int...

Ошибка в шаблоне функции: "Отсутствуют экземпляры шаблон функции, соответствующие списку аргументов"
#include &lt;iostream&gt; #include &lt;iterator&gt; #include &lt;map&gt; #include &lt;Windows.h&gt; #include...

Ошибка в шаблоне функции
Доброго времени суток. У меня проблема с функцией для чтения таблицы из файла, которая спокойно...

Переопределение функции в шаблоне
Подскажите, в пустом проекте работает следующий код #include &lt;utility&gt; #include &lt;type_traits&gt;...

Объявление функции в шаблоне
Здравствуйте. Как правильно объявить в шаблонном классе оператор / функцию: без указания...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru