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

Передача параметра по константной ссылке - что это? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
26.07.2014, 17:34     Передача параметра по константной ссылке - что это? #1
объясните мне пожалуйста что такое передача параметра в функцию по константной ссылке? я просто вообще не могу представить что значит & в параметре функции... 2 года как изучаю си, а такое увидел только недавно... & это же операция взятия адреса, я ее знаю только так... но как она может быть параметром убей не пойму...
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2014, 17:34     Передача параметра по константной ссылке - что это?
Посмотрите здесь:

C++ Передача по ссылке
Передача параметра по ссылке C++
Передача по константной ссылке C++
C++ Передача значения по ссылке
C++ Передача по ссылке
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
26.07.2014, 19:19     Передача параметра по константной ссылке - что это? #21
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от GetHelp Посмотреть сообщение
но вообще какой плюс использования ссылок? по сравнению с указателями
Более безопасный код. Следствие из отсутствия null-семантики.
Более компактный код - отсутствие синтаксиса для разыменования.

Цитата Сообщение от GetHelp Посмотреть сообщение
типа тут копирования лишнего не происходит
При передаче большого объекта по значению все его содержимое копируется - по-моему, интуитивно понятный факт.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
26.07.2014, 19:22  [ТС]     Передача параметра по константной ссылке - что это? #22
нет вот эти два товарища точно были уверены что со ссылкой будет работать быстрее... вот мне и стало интересно что же это такое... Стек на шаблонах - оцените реализацию и Стек на шаблонах - оцените реализацию
S_el
26.07.2014, 19:23
  #23

Не по теме:

Цитата Сообщение от GetHelp Посмотреть сообщение
нет вот эти два товарища точно были уверены что со ссылкой будет работать быстрее...
Почему бы не спросить у них?

0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
26.07.2014, 19:23     Передача параметра по константной ссылке - что это? #24
Цитата Сообщение от GetHelp Посмотреть сообщение
нет
Что "нет"? Одна из ссылок на мой пост, и выше про копирование я повторил.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
26.07.2014, 19:24     Передача параметра по константной ссылке - что это? #25
Цитата Сообщение от GetHelp Посмотреть сообщение
ссылкой будет работать быстрее...
Ясен пень - при передаче по значению создается копия объекта передаваемого параметром, при передаче по ссылке - передается только его адрес.
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
27.07.2014, 08:23  [ТС]     Передача параметра по константной ссылке - что это? #26
Цитата Сообщение от 0x10 Посмотреть сообщение
При передаче большого объекта по значению все его содержимое копируется - по-моему, интуитивно понятный факт.
ага... ну мне это не было понятно... все кажется больше вопросов нет спс всем...

Добавлено через 12 часов 10 минут
так просто вдруг кому еще интересна эта тема будет нашел классную статью

Добавлено через 48 минут
а вот и возник еще один вопрос, вот код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <typename T>
void swap(T& a, T& b)
{
    T tmp = a;
    a = b;
    b = tmp;
}
 
void main()
{
    int a = 10, b;
    swap(a, b);
}
и что интересно он работает... хотя вроде как не бывает нулевых ссылок... ни ошибок ничего, в дебаггере глянул: реально a присваивается NULL, b присваивается 10... как это объяснить?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.07.2014, 08:26     Передача параметра по константной ссылке - что это? #27
Первый аргумент функции ссылается на переменную a, второй - на неинициализированную переменную b.
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
27.07.2014, 08:27  [ТС]     Передача параметра по константной ссылке - что это? #28
Цитата Сообщение от 0x10 Посмотреть сообщение
Первый аргумент функции ссылается на переменную a, второй - на неинициализированную переменную b.
ну и? так ведь выходит что b раз она не инициализирована равна NULL
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.07.2014, 08:30     Передача параметра по константной ссылке - что это? #29
Цитата Сообщение от GetHelp Посмотреть сообщение
ну и? так ведь выходит что b раз она не инициализирована равна NULL
b - переменная, у которой есть адрес в памяти. Следовательно, на нее можно ссылаться независимо от ее значения.

В случае с указателями допустимо было бы передать ноль - т.е. указатель не указывал бы никуда, разыменовывать его было бы небезопасно, и функция swap упала бы на разыменовании нулевого указателя.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2014, 17:16     Передача параметра по константной ссылке - что это? #30
Цитата Сообщение от GetHelp Посмотреть сообщение
нашел классную статью
Странная, мягко говоря, статья. Один из перлов:
Вывод этой статьи очень прост. В языке си указатели надо использовать тогда и только тогда, если наш объект будет всегда существовать и нам не потребуется с помощью этой же ссылки получить доступ к другому объекту. Соответственно указатели следует использовать в противоположных случаях!
0x10
27.07.2014, 17:24
  #31

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Странная, мягко говоря, статья.
Никогда не понимал зачем переоводить бумагу байты на статьи по базовым вещам, неоднократно изложенным в более авторитетных и достоверных источниках.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2014, 18:47     Передача параметра по константной ссылке - что это?
Еще ссылки по теме:

Что это за знак >> прочитал что это сдвиг вправо? что он делает C++
Передача по ссылке C++
Как сделать доступным обращение к методу параметра, объявленного константной ссылкой? C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2014, 18:47     Передача параметра по константной ссылке - что это? #32
Цитата Сообщение от GetHelp Посмотреть сообщение
так ведь выходит что b раз она не инициализирована равна NULL
От компилятора зависит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <typename T>
void my_swap(T& a, T& b)
{
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    
    T tmp = a;
    a = b;
    b = tmp;
}
 
int main()
{
    int a = 10, b;
    my_swap(a, b);
}
Первый скрин - студия debug. Второй скрин - mingw debug. Третий скрин - mingw release.
Миниатюры
Передача параметра по константной ссылке - что это?   Передача параметра по константной ссылке - что это?   Передача параметра по константной ссылке - что это?  

Yandex
Объявления
27.07.2014, 18:47     Передача параметра по константной ссылке - что это?
Ответ Создать тему
Опции темы

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