Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116

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

26.07.2014, 17:34. Показов 7379. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
объясните мне пожалуйста что такое передача параметра в функцию по константной ссылке? я просто вообще не могу представить что значит & в параметре функции... 2 года как изучаю си, а такое увидел только недавно... & это же операция взятия адреса, я ее знаю только так... но как она может быть параметром убей не пойму...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.07.2014, 17:34
Ответы с готовыми решениями:

Передача по константной ссылке
void print(const std::string strs, const char c); void print(const std::vector<std::string>& vstrs, const char c); Нужно организовать...

Передача std::string по константной ссылке \ значению
Суть вопроса: есть простенький словарь с std::vector в качестве приватного поля. struct StudentGrade { std::string name; char...

Передача параметров по константной ссылке
struct Color { // Color(byte red=0, byte green=0, byte blue=0) // :red(red),green(green),blue(blue) // { } byte...

31
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
26.07.2014, 19:19
Лучший ответ Сообщение было отмечено GetHelp как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от GetHelp Посмотреть сообщение
но вообще какой плюс использования ссылок? по сравнению с указателями
Более безопасный код. Следствие из отсутствия null-семантики.
Более компактный код - отсутствие синтаксиса для разыменования.

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

Не по теме:

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

0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
26.07.2014, 19:23
Цитата Сообщение от GetHelp Посмотреть сообщение
нет
Что "нет"? Одна из ссылок на мой пост, и выше про копирование я повторил.
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
26.07.2014, 19:24
Цитата Сообщение от GetHelp Посмотреть сообщение
ссылкой будет работать быстрее...
Ясен пень - при передаче по значению создается копия объекта передаваемого параметром, при передаче по ссылке - передается только его адрес.
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
27.07.2014, 08:23  [ТС]
Цитата Сообщение от 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... как это объяснить?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
27.07.2014, 08:26
Первый аргумент функции ссылается на переменную a, второй - на неинициализированную переменную b.
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
27.07.2014, 08:27  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Первый аргумент функции ссылается на переменную a, второй - на неинициализированную переменную b.
ну и? так ведь выходит что b раз она не инициализирована равна NULL
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
27.07.2014, 08:30
Цитата Сообщение от GetHelp Посмотреть сообщение
ну и? так ведь выходит что b раз она не инициализирована равна NULL
b - переменная, у которой есть адрес в памяти. Следовательно, на нее можно ссылаться независимо от ее значения.

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

Не по теме:

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

0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2014, 18:47
Цитата Сообщение от 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.
Миниатюры
Передача параметра по константной ссылке - что это?   Передача параметра по константной ссылке - что это?   Передача параметра по константной ссылке - что это?  

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.07.2014, 18:47

Передача параметра по ссылке
напротив каждой записи ссылка на редактирование. Вывод БД: while ( $data = mysql_fetch_array($res) ) { echo '&lt;tr&gt;'; ...

Передача параметра по ссылке
Народ, подскажите, как организуется передача параметра в процедуру по ссылке. Делаю так: Private Function GetNextField(ByRef fStr As...

Передача параметра по ссылке
Всем здравствуйте. Други, помогите разобраться. Сидю :) вникаю в работу указателей и памяти, паралельно пытаюсь написать велосипед, в...

Передача параметра по ссылке
Здравствуйте, уважаемые форумчане! Подскажите пожалуйста, как передать значение в функцию по ссылке? Объясню немного: есть класс, в...

Передача параметра по ссылке
Всем доброго времени суток. Понимаю что вопрос покажется очень глупым, но я уже несколько часов бьюсь и не могу решить эту элементарную...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru