63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116

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

26.07.2014, 17:34. Показов 7183. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru