Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

31
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2014, 17:37 #2
Цитата Сообщение от GetHelp Посмотреть сообщение
2 года как изучаю си
Ссылки - это С++.
http://ru.wikipedia.org/wiki/Ссылка_(C%2B%2B)
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
26.07.2014, 17:38  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Ссылки - это С++.
я не делаю между ними разницы и пишу на помеси
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
26.07.2014, 17:39 #4
& - так же как и в Си используется для взятия адреса, если применяется к переменной.
А если применяется к типу, то в C++ это означает ссылочный тип.
Если Вы знакомы с Си и передачей по указателю, то можете в первом приближении считать ссылку завуалированным указателем. Основное отличие, что указатель может в разное время указывать на разные объекты. А ссылка же после инициализации не может быть перекинута на другой объект.
1
0x10
2549 / 1729 / 264
Регистрация: 24.11.2012
Сообщений: 4,351
26.07.2014, 17:39 #5
Цитата Сообщение от GetHelp Посмотреть сообщение
я не делаю между ними разницы
Вот и источник проблемы.
0
Владимир_1994
2 / 2 / 0
Регистрация: 19.05.2013
Сообщений: 27
26.07.2014, 17:40 #6
Это когда функция просит на вход указатель. То есть
C
1
2
3
4
5
6
7
8
9
10
11
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
};
 
int main(){
int x = 3;
int y = 5;
swap(&x,&y);
}
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
26.07.2014, 17:42  [ТС] #7
Tulosba, а зачем тогда пишут const еще? если она и так константна? и еще мне тут что то говорили про то что такой способ передачи лучше чем простая передача, типа тут копирования лишнего не происходит, о чем это вообще?

Добавлено через 41 секунду
Владимир_1994, это вообще не то...
0
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2014, 17:42 #8
Цитата Сообщение от Tulosba Посмотреть сообщение
А ссылка же после инициализации не может быть перекинута на другой объект.
И не может быть равна 0, и не может быть неинициализированной.
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
26.07.2014, 17:48  [ТС] #9
да и еще как потом вызывать такую функцию и внутри нее обращаться к переменной ссылке?
0
0x10
2549 / 1729 / 264
Регистрация: 24.11.2012
Сообщений: 4,351
26.07.2014, 17:49 #10
Цитата Сообщение от GetHelp Посмотреть сообщение
а зачем тогда пишут const еще?
1. Чтобы гарантировать неизменность объектов в вызывающем контексте.
2. Чтобы эту же функцию можно было использовать и для константных объектов.
0
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
26.07.2014, 19:05 #11
Цитата Сообщение от GetHelp Посмотреть сообщение
да и еще как потом вызывать такую функцию и внутри нее обращаться к переменной ссылке?
Вызывать и обращаться так же как и при передаче по значению. Переменная, переданная по константной ссылке, не может быть изменена в вызываемой функции, по не константной может, при этом изменения будут видны после выхода из функции, в отличие от переменной, переданной по значению.
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
26.07.2014, 19:09  [ТС] #12
uglyPinokkio, короче тогда я вообще не понимаю чем же она будет отличаться от обычного указателя? кроме разве что того что не надо писать при вызове &
0
Voivoid
677 / 280 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
26.07.2014, 19:11 #13
Ссылка не может быть нулевая. Ссылку нельзя переназначить
0
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
26.07.2014, 19:12 #14
Цитата Сообщение от GetHelp Посмотреть сообщение
короче тогда я вообще не понимаю чем же она будет отличаться от обычного указателя?
Для простоты - можно рассматривать как другую форму записи указателя.
0
0x10
2549 / 1729 / 264
Регистрация: 24.11.2012
Сообщений: 4,351
26.07.2014, 19:12 #15
GetHelp, выше уже писали о разнице:
1) у ссылки отсутствует null-семантика;
2) ссылка обязана быть инициализирована;
3) ссылка за время жизни может ссылаться только на один объект.
0
26.07.2014, 19:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2014, 19:12
Привет! Вот еще темы с ответами:

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

Что это за знак >> прочитал что это сдвиг вправо? что он делает - C++
int d=6, c=5,f; f = d >> c; cout<< f; вывод 0

Как получить адрес параметра, передоваемого по ссылке? - C++
подскажите как получить адрес параметра, передоваемого по ссылке? void f(int &a...) { int *p = ????; for(int i = 0; i < 3;...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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