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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [FAQ] Указатели и ссылки 
:(
    Опции темы
bsa
Дата 1.12.2009, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



unicuum, не вижу смысла обсуждать подобные вещи. Это все из разряда, где ставить const - до названия типа или после, где ставить открывающую фигурную скобку, какой размер отступа нужно использовать... На вкус и цвет, как говорится...


M
bsa
предлагаю закончить с обсуждением предпочтений, слабо касающихся темы

PM   Вверх
baldina
Дата 1.12.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 15
Всего: 101



bsa
Цитата

Скорость работы со ссылкой не ниже, чем с указателем. А зачастую выше, так как компилятор легко может ее оптимизировать. Пример:

Из примера не понятно, что там компилятор сможет "легко оптимизировать". и как это "легко" соотносится с 
Цитата

если оптимизация вообще не удалась

боюсь, для объяснения этого придется-таки поговорить о путях реализации
PM MAIL   Вверх
bsa
Дата 1.12.2009, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



baldina, спасибо.
Подправил информацию про ссылки.
PM   Вверх
Tobuk
Дата 1.12.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так и не понял из темы зачем же нужны ссылки? Все же прекрасно получаеться с указателями.
Зачем использовать ссылки урезая тем самым себе возможности?

Это сообщение отредактировал(а) Tobuk - 1.12.2009, 21:16
PM MAIL   Вверх
mes
Дата 1.12.2009, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Tobuk @  1.12.2009,  20:15 Найти цитируемый пост)
Зачем использовать ссылки урезая тем самым себе возможности?

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



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


Опытный
**


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

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



Цитата(Tobuk @  1.12.2009,  21:15 Найти цитируемый пост)
Зачем использовать ссылки урезая тем самым себе возможности?

Цитата(mes @  1.12.2009,  22:14 Найти цитируемый пост)
я бы перефразировал.. Ссылки ввели наряду с указателями, чтоб расширить возможности

Вот, имеем два противоположных мнения, пока что без намёка, что урезаем и что расширяем.


--------------------
user posted image
обычный день на винграде
PM   Вверх
mes
Дата 2.12.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(unicuum @  2.12.2009,  00:47 Найти цитируемый пост)
от, имеем два противоположных мнения, пока что без намёка, что урезаем и что расширяем. 

Почему без намека.. Tobuk, предположил что если ссылки нельзя "переставить", а также "хранить в них нуль", то они являются урезаными указателями.
Однако тут забылось, что вышеуказанные два фактора нужны далеко не всегда, и во многих случаях будут заставлять программиста отвлекаться на лишние детали,
чтоб гарантировать безопасность кода.



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


Опытный
**


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

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



Вот так сразу вспоминается только то, что ссылки в операторах используют, для возвращения *this, и потом на основе полученного строят выражения. А что ещё?


--------------------
user posted image
обычный день на винграде
PM   Вверх
mes
Дата 2.12.2009, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(unicuum @  2.12.2009,  09:58 Найти цитируемый пост)
что ссылки в операторах используют, для возвращения *this, и потом на основе полученного строят выражения. А что ещё?

Важно не то, где используются, а какую семантику они несут.

как например отнесетесь к такому коду ?
Код

class { void f() { if (!this) return; ...} };





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


Новичок



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

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



Вот пример:
Код

void foo(int &hello);
void foo(int hello);
void foo(int *hello);

int i = 5;

foo(i);
foo(i);
foo(&i);


Ссылки опасны, потому что нельзя понять как передаються аргументы в функцию(по значению или нет?).

>Ссылки ввели наряду с указателями, чтоб расширить возможности.

Что-что?
Ссылки появились только в С++, а указатели были "открыты" еще задолго до C.
Не вижу никакой выгоды от использования ссылок.
Хотя я пишу на C и их не использую :-\

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


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


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

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



Цитата(Tobuk @  2.12.2009,  20:21 Найти цитируемый пост)

Ссылки опасны, потому что нельзя понять как передаються аргументы в функцию(по значению или нет?).


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


Цитата(Tobuk @  2.12.2009,  20:21 Найти цитируемый пост)

Что-что?
Ссылки появились только в С++, а указатели были "открыты" еще задолго до C.

1. "наряду" это не "одновременно", а ближе к "в дополнение, на равных условиях"
2. ну и "ссылочность" как таковая изобретена задолго до C++ и даже до Си.. просто раньше называлось не передача по ссылке, а передача по имени.

Цитата(Tobuk @  2.12.2009,  20:21 Найти цитируемый пост)
Не вижу никакой выгоды от использования ссылок.

Ну а мне было бы мучительно без них ..
Преимущества (основные в семантическом плане) 100 раз обсуждались - поиск поможет 
smile


Это сообщение отредактировал(а) mes - 2.12.2009, 22:25


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


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Tobuk, ссылки нужны, чтобы гарантировать единообразие передачи параметров. Например, есть функция, которая принимает объекты типа std::string. Так как операция их копирования довольно длительной может быть, то было принято решение использовать ссылку. В результате, пользователь функции может вызвать ее с параметром типа std::string или типа const char *... Попробуй тоже самое сделать с указателями - ничего не получится. Более того, выглядеть будет как-то стремно, я уж не говорю о том, что код будет потенциально более опасен. Впрочем, Сишнику этого не понять.
PM   Вверх
baldina
Дата 3.12.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 15
Всего: 101



Цитата

Ссылки опасны, потому что нельзя понять как передаються аргументы в функцию(по значению или нет?).

неправда
Код

void foo(/* by ref */ int& hello);
void foo(/* by value */ int const& hello);

PM MAIL   Вверх
djamshud
Дата 3.12.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


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

Репутация: 4
Всего: 39



>void foo(/* by value */ int const& hello);

Ну щас.. Это тоже передача по ссылке. А чел кстати говорил про неясность в вызывающей функции:
call(somevar);
не ясно, изменит ли (гипотетически) call значение somevar или нет. Поэтому всегла, когда предполагается изменение передаваемых параметров, использую указатель. А ссылки рулят в случае ссылаемости на константу. Объекты передаются без копирования, а выглядит это, как обыный вызов.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
baldina
Дата 3.12.2009, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 15
Всего: 101



технически - по ссылке, но семантически - по значению, т.к. значение аргумента изменить невозможно.
Цитата

не ясно, изменит ли (гипотетически) call значение somevar или нет

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

call(somevar);

это могучий пример, но в реальном коде проблема носит скорее гипотетический характер: обычно тот, кто пишет/анализирует код, бывает в курсе, что и как делает call()  smile 

Это сообщение отредактировал(а) baldina - 3.12.2009, 12:25
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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