Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » [решено] [C++] *Теория* | Что значит возвратить ссылку?

Ответить
Настройки темы
[решено] [C++] *Теория* | Что значит возвратить ссылку?

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я прочитал несколько книг по C++, где объясняется возвращение ссылки функцией, но так и не понял суть этого вопроса.
Объясните пожалуйста что значит возвратить ссылку.
Например есть следующий пример кода:
Код: Выделить весь код
int& func(int a)
{
      int * temp = new int(5);
      return *temp;
}
Что конкретно возвращает функция? В чем основной смысл?

Отправлено: 15:00, 25-02-2007

 

Пользователь


Сообщения: 95
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Оператором new ты выделяешь 20 байт в памяти.
Далее возвращаешь указатель на этот кусок памяти, грубо говоря указатель - это адрес 1 элемента куска памяти.

-------
Вся наша жизнь - игра.... вот только б не повисла...


Отправлено: 15:55, 25-02-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Цитата:
где объясняется возвращение ссылки функцией
...это что же за книги такие,где старый добрый указатель именуется как ссылка ??

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 18:38, 25-02-2007 | #3


редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


DillerInc
Вообще-то, в языке C++ ссылки и указатели это разные понятия. Если по простому, то ссылка это указатель, который всегда на что-то указывает, значение которого нельзя изменить (именно указателя, а не того, на что он указывает; т.е значение устанавливается только один раз - при связке ссылки с тем, на что она ссылается), и весь синтаксис работы со ссылками такой же как с обычными переменными, а не указателями.

JJester
Цитата:
int& func(int a)
{
int * temp = new int(5);
return *temp;
}
В данном случае использование ссылки некрасиво и даже вредно (т.к. маскируется, то что память надо будет ещё и освобождать). Здесь лучше использовать указатель.

А про кореектное использование ссылок лучше почитать в какой-нибудь хорошей книге. Например, перегруженный operator= как правило возвращает ссылку. (В результате можно делать трюки вроде while ((token = next_token()) != LAST_TOKEN) do_something(); со своими произвольными классами)

-------
http://ivank.ru


Отправлено: 00:39, 26-02-2007 | #4

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


ещё полезные примеры использования ссылки
Код: Выделить весь код
// аналог with в делфи:
// допустим есть структура struct1_type struct1, в ней struct2_type struct2, в ней int field1, int field2, ...;

// без ссылок:
struct1.struct2.field1 = 1;
struct1.struct2.field1 = 2;
...

// со ссылкой:
{
  struct2_type& s(struct1.struct2);
  s.field1 = 1;
  s.field2 = 2;
  ...;
}
уменьшение операций копирования при передачи сложных объектов как параметров (по ссылке)
Код: Выделить весь код
// void Window::setText(const string& s)
// Point Window::setMeasure(const string& s);
// class Form1 : Window {...};

void TForm1::setText(const string& s)
{
   setMinimumSize(measureText(s)); // не копируется, а передаётся та же строка (её адрес)
   Window::setText(s); // опять не было копирования
}

...

// создалась переменная типа string, инициализировалась строкой
// потом от неё взялся адрес и отправился в виде ссылки как параметр Form1::setText
// при выходе из функции string уничтожился
form1.setText("Form1 caption");

Отправлено: 22:48, 28-02-2007 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » [решено] [C++] *Теория* | Что значит возвратить ссылку?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
7 / 2008 R2 - [решено] что значит ошибка 0xc000035a ? paravozik2009 Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista 4 12-12-2009 00:08
OpenBSD - Что значит сдесь написанное??? Srednas Общий по FreeBSD 1 22-01-2008 13:34
OpenBSD - Что значит сдесь написанное??? Srednas Общий по FreeBSD 0 22-01-2008 12:49
Разное - [решено] что значит OEI в лицензии на windows, office? vvsnik Лицензирование продуктов Microsoft 4 10-11-2007 14:39
Что значит эта ошибка indigo Microsoft Windows 95/98/Me (архив) 3 04-10-2002 15:02




 
Переход