![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
unicuum, не вижу смысла обсуждать подобные вещи. Это все из разряда, где ставить const - до названия типа или после, где ставить открывающую фигурную скобку, какой размер отступа нужно использовать... На вкус и цвет, как говорится...
|
|||
|
||||
baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
bsa,
Из примера не понятно, что там компилятор сможет "легко оптимизировать". и как это "легко" соотносится с
боюсь, для объяснения этого придется-таки поговорить о путях реализации |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
baldina, спасибо.
Подправил информацию про ссылки. |
|||
|
||||
Tobuk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 20.11.2008 Репутация: нет Всего: нет |
Так и не понял из темы зачем же нужны ссылки? Все же прекрасно получаеться с указателями.
Зачем использовать ссылки урезая тем самым себе возможности? Это сообщение отредактировал(а) Tobuk - 1.12.2009, 21:16 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
я бы перефразировал.. Ссылки ввели наряду с указателями, чтоб расширить возможности. ![]() |
|||
|
||||
unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: нет Всего: 8 |
Вот, имеем два противоположных мнения, пока что без намёка, что урезаем и что расширяем. -------------------- ![]() обычный день на винграде |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Почему без намека.. Tobuk, предположил что если ссылки нельзя "переставить", а также "хранить в них нуль", то они являются урезаными указателями. Однако тут забылось, что вышеуказанные два фактора нужны далеко не всегда, и во многих случаях будут заставлять программиста отвлекаться на лишние детали, чтоб гарантировать безопасность кода. |
|||
|
||||
unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: нет Всего: 8 |
Вот так сразу вспоминается только то, что ссылки в операторах используют, для возвращения *this, и потом на основе полученного строят выражения. А что ещё?
-------------------- ![]() обычный день на винграде |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
Tobuk |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 20.11.2008 Репутация: нет Всего: нет |
Вот пример:
Ссылки опасны, потому что нельзя понять как передаються аргументы в функцию(по значению или нет?). >Ссылки ввели наряду с указателями, чтоб расширить возможности. Что-что? Ссылки появились только в С++, а указатели были "открыты" еще задолго до C. Не вижу никакой выгоды от использования ссылок. Хотя я пишу на C и их не использую :-\ |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
В других "безопасных" языках (тот же паскаль) тоже не заметно, но никого не смущает.. Кстати в них тоже "ссылочная" а не "указательная" передача параметров.
1. "наряду" это не "одновременно", а ближе к "в дополнение, на равных условиях" 2. ну и "ссылочность" как таковая изобретена задолго до C++ и даже до Си.. просто раньше называлось не передача по ссылке, а передача по имени. Ну а мне было бы мучительно без них .. Преимущества (основные в семантическом плане) 100 раз обсуждались - поиск поможет ![]() Это сообщение отредактировал(а) mes - 2.12.2009, 22:25 |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Tobuk, ссылки нужны, чтобы гарантировать единообразие передачи параметров. Например, есть функция, которая принимает объекты типа std::string. Так как операция их копирования довольно длительной может быть, то было принято решение использовать ссылку. В результате, пользователь функции может вызвать ее с параметром типа std::string или типа const char *... Попробуй тоже самое сделать с указателями - ничего не получится. Более того, выглядеть будет как-то стремно, я уж не говорю о том, что код будет потенциально более опасен. Впрочем, Сишнику этого не понять.
|
|||
|
||||
baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
неправда
|
||||
|
|||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 |
|||
|
||||
baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
технически - по ссылке, но семантически - по значению, т.к. значение аргумента изменить невозможно.
есть простой способ избежать неясностей - всегда использовать функциональный стиль, т.е. все результаты передаются через возвращаемое значение, аргументы не изменяются.
это могучий пример, но в реальном коде проблема носит скорее гипотетический характер: обычно тот, кто пишет/анализирует код, бывает в курсе, что и как делает call() ![]() Это сообщение отредактировал(а) baldina - 3.12.2009, 12:25 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |