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

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

26.07.2014, 17:34. Показов 7121. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru