Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чем отличия указателя от ссылки? 
:(
    Опции темы
mes
Дата 29.10.2011, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(borisbn @  29.10.2011,  16:35 Найти цитируемый пост)
Сказал "А"...

Сказал "Б"...
ссылки в С++ не просто синтаксический сахар для всегда_инициализированного_указателя, но также могут создать поведение которое нельзя получить с помощью указателя..  (и это еще не вспоминая C++11)  smile 


--------------------
PM MAIL WWW   Вверх
alexvs11
Дата 31.10.2011, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



Цитата(DENNN @  13.1.2005,  19:56 Найти цитируемый пост)
К примеру если в функцию в качестве параметров передаются ссылки, то это дает дополнительную гарантию, что в при вызове этой функции будут переданны реальные значения, а не указатели "в никуда". Отсюда, в частности следует, что такой способ передачи параметров избавляет нас от проверки указателей на "валидность". 

Код

int f(int& val)
{
  return 0;
}

int main()
{
   int* pval = (int*)0x12345;
   f ((int&)*pval);
}

c++ с вами не согласен
PM MAIL   Вверх
math64
Дата 31.10.2011, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



alexvs11, Невалидную ссылку можно получить проще, без таких ухищрений
Код

void f(int& ref);
int array[10];
f (array[10]);

PM   Вверх
mes
Дата 31.10.2011, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



alexvs11, гарантия не на инвалидность (которая лежит в обоих случаях на плечах вызывающей стороны), а "не_нуль" гарантия..

Добавлено через 1 минуту и 47 секунд
нуль значение для  ссылки не валидно, в отличие от для указателя..



--------------------
PM MAIL WWW   Вверх
borisbn
Дата 31.10.2011, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(mes @  29.10.2011,  18:30 Найти цитируемый пост)
создать поведение которое нельзя получить с помощью указателя

Не понял. Что Вы имели в виду ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 31.10.2011, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(borisbn @  31.10.2011,  14:35 Найти цитируемый пост)
Не понял. Что Вы имели в виду ? 

продлевание жизни rvalue при пристыковании к константной ссылке со всеми вытекающими преимуществами и недостатками..



--------------------
PM MAIL WWW   Вверх
borisbn
Дата 31.10.2011, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



mes, && ?
Я имею ввиду: Вы имели в виду move semantics ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
mes
Дата 31.10.2011, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



нет.. 
Цитата(mes @  29.10.2011,  17:30 Найти цитируемый пост)
 не вспоминая C++11

говорил всего лишь о const&
smile




--------------------
PM MAIL WWW   Вверх
volatile
Дата 31.10.2011, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Если сильно руки чешутся, можно и нулевую ссылку получить  smile 
Код

void f(int & ref);

int main()
{
   f(*(int*)0);
}


http://liveworkspace.org/code/2f66addfa358...2b1b2d4719dbd3f

PM MAIL   Вверх
math64
Дата 1.11.2011, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Цитата(volatile @  31.10.2011,  23:45 Найти цитируемый пост)
Если сильно руки чешутся, можно и нулевую ссылку получить  smile 

Это с ухищрениями. Можно получить ненамеренно:
Код

void f(int & ref);
int main()
{
   int* p = NULL;
   f(*p);
}


PM   Вверх
azesmcar
Дата 1.11.2011, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(volatile @  31.10.2011,  23:45 Найти цитируемый пост)
Если сильно руки чешутся, можно и нулевую ссылку получить   

Нельзя, разыменование нулевого указателя - undefined behavior.
Цитата

A reference shall be initialized to refer to a valid object or function.
[Note: in particular, a null reference cannot exist in a well-defined program, because the only way to create such a reference would be to bind it to the “object” obtained by dereferencing a null pointer, which causes undefined behavior. As described in 9.6, a reference cannot be bound directly to a bit-field.]

PM   Вверх
alexvs11
Дата 1.11.2011, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 6
Всего: 10



azesmcar, кто спорит
тут вопрос в том, что с++ позволяет все свои правила обходить - в том числе и с нулевой ссылкой
PM MAIL   Вверх
mes
Дата 1.11.2011, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(alexvs11 @  1.11.2011,  08:46 Найти цитируемый пост)
 кто спорит
тут вопрос в том, что с++ позволяет все свои правила обходить - в том числе и с нулевой ссылкой 

но не учитываете, что этот обход не нарушает гарантий языка smile


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.