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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 52
#1

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

14.09.2013, 11:33. Просмотров 295. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2013, 11:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятный параметр в шаблоне функции (C++):

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

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

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

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

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

Вызов функции в шаблоне класса - C++
Выполняю,через шаблоны класса. Вообщем,в меню не могу вызвать функции. Скажите,все ли правильно в вызове функций? вот файл .h ...

5
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
14.09.2013, 11:41 #2
Роль значения по умолчанию. Т.е. можно скажем написать func<int>(), тогда значение val будет равно 0
0
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 52
14.09.2013, 11:46  [ТС] #3
Voivoid
Это понятно. Я имел ввиду, что происходит с объектом при передачи в такой параметр? Как значение по умолчанию на него влияет?
0
zenw
154 / 110 / 3
Регистрация: 12.06.2013
Сообщений: 168
14.09.2013, 11:49 #4
Цитата Сообщение от Paket236 Посмотреть сообщение
Это понятно. Я имел ввиду, что происходит с объектом при передачи в такой параметр? Как значение по умолчанию на него влияет?
Никак не влияет. Значение по умолчанию даже в сигнатуру функции не входит, и используется только если аргумент не указан.
1
Voivoid
675 / 278 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
14.09.2013, 11:50 #5
Ничего не происходит. Но имея подобное значение по умолчанию можно например делать следующие вызовы функции: func<A>(); это приведет к тому, что в func val будет ссылаться на временный объект типа A сконструированный при помощи дефолтного конструктора
2
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 52
14.09.2013, 12:00  [ТС] #6
Ааа, всё, разобрался. Я просто забыл, что значение по умолчанию срабатывает только когда, когда аргумент не указан.
Спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2013, 12:00
Привет! Вот еще темы с ответами:

Необъявленный идентификатор в шаблоне функции - C++
Добрый вечер! Пишу простенькую программку, но возникла проблема в коде: #include &lt;iostream&gt; using namespace std; template...

Ошибка с типами в шаблоне функции - C++
1&gt;c:\users\nano\desktop\visual studio\homework\homework\homework.cpp(10): error C2563: несоответствие в списке формальных параметров ...

Конфликт имени функции в шаблоне - C++
template &lt;class x&gt; x plus(const x &amp;x1, const x &amp;x2) { return x1+x2; } int main(int argc, char *argv, char *env) {...

Дружественные функции в классе-шаблоне - C++
stdafx.h #include &lt;iostream.h&gt; template &lt;typename T&gt; class Iterator; template &lt;typename T&gt; class Set ...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
14.09.2013, 12:00
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru