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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
#1

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

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

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

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

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

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

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

Передача параметра по ссылке - C++
Здравствуйте! Подскажите пожалуйста! Делаю пример из книги: #include <iostream> #include <conio.h> using namespace...

Аллокация памяти при передаче string в функцию по константной ссылке - C++
Поясните пожалуйста данный пример: // C++11 #include <string> void get_vendor_from_id(const std::string& id) { // аллоцирует память,...

Как сделать доступным обращение к методу параметра, объявленного константной ссылкой? - C++
Ругается на строку, содержащую присваивание локальной переменной значения метода параметра, объявленного константной ссылкой. Метод...

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

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

Не по теме:

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

0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
26.07.2014, 19:23     Передача параметра по константной ссылке - что это? #24
Цитата Сообщение от GetHelp Посмотреть сообщение
нет
Что "нет"? Одна из ссылок на мой пост, и выше про копирование я повторил.
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
26.07.2014, 19:24     Передача параметра по константной ссылке - что это? #25
Цитата Сообщение от GetHelp Посмотреть сообщение
ссылкой будет работать быстрее...
Ясен пень - при передаче по значению создается копия объекта передаваемого параметром, при передаче по ссылке - передается только его адрес.
GetHelp
-7 / 61 / 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
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
27.07.2014, 08:26     Передача параметра по константной ссылке - что это? #27
Первый аргумент функции ссылается на переменную a, второй - на неинициализированную переменную b.
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
27.07.2014, 08:27  [ТС]     Передача параметра по константной ссылке - что это? #28
Цитата Сообщение от 0x10 Посмотреть сообщение
Первый аргумент функции ссылается на переменную a, второй - на неинициализированную переменную b.
ну и? так ведь выходит что b раз она не инициализирована равна NULL
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,009
27.07.2014, 08:30     Передача параметра по константной ссылке - что это? #29
Цитата Сообщение от GetHelp Посмотреть сообщение
ну и? так ведь выходит что b раз она не инициализирована равна NULL
b - переменная, у которой есть адрес в памяти. Следовательно, на нее можно ссылаться независимо от ее значения.

В случае с указателями допустимо было бы передать ноль - т.е. указатель не указывал бы никуда, разыменовывать его было бы небезопасно, и функция swap упала бы на разыменовании нулевого указателя.
alsav22
5416 / 4812 / 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++
подскажите как получить адрес параметра, передоваемого по ссылке? void f(int &amp;a...) { int *p = ????; for(int i = 0; i &lt; 3;...

Передача по ссылке - C++
Здравствуйте. 1.typedef struct { MATRIXX_LENTA&lt;double&gt;* MATR; //Ленточная матрица } DATA_LENTA, *PDATA_LENTA; DWORD WINAPI...

Передача по ссылке - C++
С помощью функции rand() округлить значение double и передать его по ссылке.

Передача по ссылке - C++
В учебнике написано, что можно использовать функцию с левой стороны операции присваивания, если она возвращает ссылку. Например, так: ...

Передача значения по ссылке - C++
1. Объявите (в отельном заголовочном файле) и реализуйте (в другом файле) процедуры (они не возвращают значений!) согласно варианту. 2....


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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     Передача параметра по константной ссылке - что это?
Ответ Создать тему
Опции темы

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