Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ссылки и указатели

17K
14 мая 2008 года
Roy
24 / / 04.06.2007
Рыбята,
В чем принципиальная разница м\у ссылками и указателями, и когда ссылки использовать предпочтительнее:rolleyes:
Страницы:
353
22 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: Green
А при чем именно тут стандарт?
Все твои аргументы теперь сводятся к следующему:
если в стандарте func() - не имя, то ты вообще все крутишь, как хочешь.
Мы говорили про то, хранит ссылка значение или нет, а не про то является ли func() именем по стандату.
Для чего ты пытаешься запутать обсуждение?


Я пытаюсь понять продолжаешь ли ты утверждать, что твоя интерпретация соответствует стандарту, ведь ты утверждал что ты не выходишь за рамки языка.

Цитата: Green
Не понял логики. Объясни пожалуйста.
Солнце встает на Востоке, что линий раз доказывает правомерность твоей трактовки? :D


Там везеде есть адрес. Где нет адреса - нет ссылки, что я и показал примером.

Цитата: Green
Потому, что ссылка не может ссылаться на временные объекты, т.к. время их жизни меньше, чем время жизни ссылки. А вовсе не потому, можно взять адрес или нет.


А как следует из того, что ссылка - это альтернативное имя факт того, что она не может ссылаться на временные объекты?
Ведь если ссылка это альтернативное имя, то почему я не могу написать вот так:

 
Код:
int*& a = func();
int* b1 = a;
int* b2 = a;
int* b3 = a;


подразумевая:

 
Код:
int* b1 = func();
int* b2 = func();
int* b3 = func();


Не понятно. Ведь если 'a' это альтернативное имя 'func()', то они должны быть взаимозаменяемыми.

Цитата: Green
Потому что адрес - это значение, а не объект.


Так что мне мешает?

Цитата: Green
Это соотносится вот с этим:
Как видишь, ты тоже порой не понимаешь чего-то... :)


В моем примере понятно что c1 и c2 - это ссылки, а alloc возвращает указатель, в твоем же вообще ничего не задекларировано, и происходит доступ непонятно к чему.

Цитата: Green
Еслиб ты инициализировал ссылку напрямую значением указателя, не было бы вопросов.
Но ты разыменовываешь этот указатель и получаешь объект, которым уже инициализируешь ссылку.
Так при чем тут адрес?


А почему если что-то содержит адрес, то его нужно обязательно инициализировать указателем?

Цитата: Green
Оперируя только ссылкой. А в общем случае вообще никак средствами языка.


Ты задал уже столько вопросов по этому своему примеру.
Может, покажешь сам чего ты хочешь добиться, чем пытаться загнать меня в ловушку.


Я хотел нормального ответа.

Цитата: Green
А вот ты меня поймал... так поймал... прям ехидство зашкаливает...


Признайся, ты учишься на телепата. Ты все время пытаешься угодать о чем я думаю и что мной движет когда пишу что-то.

Цитата: Green
Только ты забыл, что сам сказал, что мы говорим о трактовках и что твой "неявный указатель" ещё в большей степени не подходит под стандарт.


Так ты же утверждал, что не выходишь за рамки стандарта, а не я. А раз выходишь - спор исчерпан.

Цитата: Green
В контексте моей фразы, под которой ты поставил свой вопрос, меня не устраивает что ты перевираешь мои слова и пытаешься т.о. предать негативную окраску всем моим постам.


Да ничего я не пытаюсь придать. Хватит приписывать мне то, чего я не делаю.
Ты настаивал на абсолютной точности своей точки зрения тем, что утверждал что она полностью укаладывается в стадарт.

Цитата: Green
Об адресе - нет. О "неявном указателе" - да.
...
Понятная, но неверная. Я могу принять трактовку с "неявным указателем", но вот с адресом не соглашусь.


Так ведь неявный указатель содержит адрес. Как ты их так разделил?

Цитата: Green
Ну, например, тебя вводит в заблуждение с адресом.
...
Не приписываешь намрянно, но употребляя слово "указатель" вводишь в ряд заблуждений, одним из которых является адрес.


Какие заблуждения? Где? Что следует из того что ссылка внутри это указатель? Ничего.

Цитата: Green
Согласен, трактовка через альтернативное имя имеет нестройность в части касающейся func(), однако здесь можно принять, что именем будет все выражение возвращающее ссылку и имя это как и имя любого объекта актуально только пока актуален этот объект. Я не вижу чему это может помешать.


См. выше "наш ответ ответу Чемберлену". :)

Цитата: Green
Альтернативное имя я трактую по своему.
Только к чему этот вопрос, если "неявный указатель" ты тоже трактуешь по своему, а не по стандарту?


Не я говорил, что остаюсь в рамках языка.

Цитата: Green
См выше.


Не понял чем оно лучше.

Цитата: Green
Имя ассоциируется с объектом, а не с адресом. В этом и основной наш спор.


Опять таки вопрос тарктовки.

Цитата: Green
Это как? Объясни.


Ссылку ты можешь создать динамически (например, возвратить из функции), имя - нет. И если я правильно понял, имя это сам вызов функции в твоей трактовке.

Цитата: Green
И ответь все же на вопрос: А ссылка - это тоже синоним адреса?


Ссылка это нечто содержащее адрес. Т.к. она содержит адрес ее тоже можно назвать синонимом адреса. Это трактовка.

Цитата: Green
И при чем тут ссылка?
Хоть убей не вижу связи между адресом и ссылкой.


Если адрес, единственное что идентифицирует объект, то ссылка может ссылаться на этот объект только посредством адреса. Все просто.

Цитата: Green
А что по поводу твоего указателя?
Будем отделать или нет?


Я давно написал, что не нужно его искать в стандарте.

Цитата: Green
Что за дурацкая манера, утверждать о своих высказываниях, как о трактовке, что они т.о. не завязаны четко на стандарт и тут же пытаться жестко привязать мои трактовки к стандарту.
Соблюдай правила игры, которые сам же и устанавливаешь.


Еще раз, ты говорил, что не выходишь за рамки стандарта. Если выходишь - спор не имеет основы.

Цитата: Green
Но скажи, это полное твое определение? А как же нюансы отличающие "неявный указатель"-сущность от указателя-объекта, коим представлена? Из этой вормулировки, получается, что я могу оперировать ссылкой, как указателем. Так?


Нет. Общее это внутрннее представление (адрес) и возможность получить доступ к объекту..

Цитата: Green
И ещё интересная фраза присутствует в этом определении: "и без получения адреса при инициализации".
Значит все же без адреса?


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

Цитата: Green
Тогда зачем её называть бритвой?


Потому что она отрезает лишнее, так же как и бритва.

Цитата: Green
Вот упоминаются принципы:
...
А... я понял, ты не говорил ни того ни другого... ни что используют принципы, ни что НЕ используют.
Тогда вопрос: так используют или нет?
Я говорил об этом.


Одинаковые принципы внутреннего представления и разные принципы использования, т.к. интерфейс разный.

Цитата: Green
Значит, он оперирует адресами?


Да. Указатель оперирует адресам, но не только. А через них можно получить доступ к объекту.

Цитата: Green
Э... а почему бы не ссылкой.
Это было бы корректнее. Хотя бы потому, что не надо было бы добавлять, что этот указатель неявно разыменовывается, не является объектом и еще пунктов 10 несоответсвий и нюансов.


Потому что непонятно что же такое ссылка. Ты же сам долго не мог определиться с ней.

Цитата: Green
Да у меня одна трактовка, просто пытаюсь донести её по разному.


Я видел 2 принципиально разные трактовки у тебя: другое имя и lvalue другого объекта.

Цитата: Green
Кстати, заметь, я ни разу не предрался, что ты привел уже несколько трактовок, хотя различных форм было несколько. Не так ли?


Это все одна трактовка.

Цитата: Green
Ты - можешь.


Допустим я перешел на другой компилятор, где ссылки реализованы по другому. Если я буду продолжать думать о ссылках как о нечте содержащем адрес, что-нибудь от этого изменится? Я перестану понимать как правильно использовать ссылку?

Цитата: Green
А я бы не представлял. Зачем мне представлять что-то и так понятное, через механизмы, которые внутри неоднозначны.


Да вот не понятно твое понятное.

Цитата: Green
Ведь реализация ссылки неоднозначна. С этим то ты спорить не будешь?


Не буду, реализация чего угодно не однозначна.

3
23 мая 2008 года
Green
4.8K / / 20.01.2000
Цитата: Nixus
Я пытаюсь понять продолжаешь ли ты утверждать, что твоя интерпретация соответствует стандарту, ведь ты утверждал что ты не выходишь за рамки языка.


Она не выходит за рамки языка, но т.к. это трактовка, то не является определением.

Цитата: Nixus

А как следует из того, что ссылка - это альтернативное имя факт того, что она не может ссылаться на временные объекты?


А кто сказал, что не может?
Может, но при этом срок её жизни должен быть не больше срока жизни объекта.

Цитата: Nixus

Ведь если ссылка это альтернативное имя, то почему я не могу написать вот так:

 
Код:
int*& a = func();
int* b1 = a;
int* b2 = a;
int* b3 = a;


подразумевая:

 
Код:
int* b1 = func();
int* b2 = func();
int* b3 = func();


Не понятно. Ведь если 'a' это альтернативное имя 'func()', то они должны быть взаимозаменяемыми.


'a' - альтернативное имя возвращаемого объекта.

Цитата: Nixus

В моем примере понятно что c1 и c2 - это ссылки, а alloc возвращает указатель, в твоем же вообще ничего не задекларировано, и происходит доступ непонятно к чему.


В твоем примере понятно, лишь из контекста и ссылки в нем вообще не при чем.

Цитата: Nixus

А почему если что-то содержит адрес, то его нужно обязательно инициализировать указателем?


Потому, что только в этом случае имеет смысл говорить об адресе.

Цитата: Nixus

Я хотел нормального ответа.


Ответ: в общем случае НИКАК.

Цитата: Nixus

Так ведь неявный указатель содержит адрес. Как ты их так разделил?


Где содержит? В памяти?

Цитата: Nixus

Какие заблуждения? Где? Что следует из того что ссылка внутри это указатель? Ничего.


Как ничего? Например это: "Так ведь неявный указатель содержит адрес."
Где содержит, в памяти?

Цитата: Nixus

Ссылку ты можешь создать динамически (например, возвратить из функции), имя - нет. И если я правильно понял, имя это сам вызов функции в твоей трактовке.


Не правильно понял. Имя в данном случае - это выражение обозначающее вызов. Два одинаковых выражения, например func() + func(), это уже два альтернативных имени.

Цитата: Nixus

Ссылка это нечто содержащее адрес. Т.к. она содержит адрес ее тоже можно назвать синонимом адреса. Это трактовка.

Если адрес, единственное что идентифицирует объект, то ссылка может ссылаться на этот объект только посредством адреса. Все просто.

Еще раз, ты говорил, что не выходишь за рамки стандарта. Если выходишь - спор не имеет основы.

Да. Указатель оперирует адресам, но не только. А через них можно получить доступ к объекту.

Допустим я перешел на другой компилятор, где ссылки реализованы по другому. Если я буду продолжать думать о ссылках как о нечте содержащем адрес, что-нибудь от этого изменится? Я перестану понимать как правильно использовать ссылку?

Да вот не понятно твое понятное.


Цитата: Nixus

Там везеде есть адрес. Где нет адреса - нет ссылки, что я и показал примером.


Только здесь ссылка не завязана на адрес. Ты пытаешься сделать подмену выводов.
Нет объекта - нет ссылки. Вот это верно.
А то, что объект располагается в памяти по определенному адресу - это проблемы объекта, а не ссылки.
Ссылка ссылается на объект, а не на его адрес.

Указатели, адреса и т.п. достались ООП С++ от неООП С.
Ссылки - это одна из деталей ООП языка, хотя С++ довольно странный ООП язык.
В большинстве ООП языков есть такое понятие, как ссылка, и в этих языках к объектам получают доступ с помощью ссылок, а не указателей или адресов. Во многих (если не во всех) ООП языках вообще не оперируют адресами и получают доступ к объектам не по их адресам. Да и не возможно получить адрес объекта в памяти, т.к. объект этот может лежать в каждый момент времени в разных адресах, при этом оставаясь все тем же объектом.

Теперь вернемся к C++. Если я могу рассматривать ссылку как просто доступ (ссылание) на объект (а ведь могу же, раз в других языках могу), то зачем мне заморачиваться с адресами? Почему бы мне не продолжать мыслить с т.з. ООП концепции? Зачем переходить на более низкий уровень?
В C# ты же не рассматриваешь ссылку, как указатель? А в Python? А в Java?
Тогда, зачем её рассматривать так в C++ ?

87
24 мая 2008 года
Kogrom
2.7K / / 02.02.2008
Я тут подумал, что свойства ссылки похожи на свойства константного указателя (не помню, есть ли такое явление, но смысл такой). Думаю, это более понятное сравнение, чем неявный указатель.

А вообще, если рассуждать как Nixus, то все переменные в C++ - это неявные указатели, даже простые переменные, так как их адрес можно узнать и значит они неявно хранят свой адрес...
353
26 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: Green
Она не выходит за рамки языка, но т.к. это трактовка, то не является определением.


Как не выходит, если ты вводишь новые понятия?

Цитата: Green
А кто сказал, что не может?
Может, но при этом срок её жизни должен быть не больше срока жизни объекта.


В данном примере не может.

Цитата: Green
'a' - альтернативное имя возвращаемого объекта.


И func() альтернативное имя возвращаемого объекта, значит они взаимозаменяемы. Да?

Цитата: Green
В твоем примере понятно, лишь из контекста и ссылки в нем вообще не при чем.


Как это не при чем?

Цитата: Green
Потому, что только в этом случае имеет смысл говорить об адресе.


Почему?
int a = 'c';
Тут нет смысла говорить о int, т.к. мы инициализируем его не int'ом?

Цитата: Green
Где содержит? В памяти?


В памяти.

Цитата: Green
Как ничего? Например это: "Так ведь неявный указатель содержит адрес."
Где содержит, в памяти?


В ней родимой.

Цитата: Green
Не правильно понял. Имя в данном случае - это выражение обозначающее вызов. Два одинаковых выражения, например func() + func(), это уже два альтернативных имени.


Так что же такое это "альтернативное имя"? Просто выражение? Т.е. lvalue ссылающееся на объект? Так при чем тут ссылки тогда?

Цитата: Green
Только здесь ссылка не завязана на адрес. Ты пытаешься сделать подмену выводов.
Нет объекта - нет ссылки. Вот это верно.


Я тебе уже показал, когда есть объект и нет ссылки.

Цитата: Green
А то, что объект располагается в памяти по определенному адресу - это проблемы объекта, а не ссылки.
Ссылка ссылается на объект, а не на его адрес.


Посредством адреса.

Цитата: Green
Указатели, адреса и т.п. достались ООП С++ от неООП С.
Ссылки - это одна из деталей ООП языка, хотя С++ довольно странный ООП язык.
В большинстве ООП языков есть такое понятие, как ссылка, и в этих языках к объектам получают доступ с помощью ссылок, а не указателей или адресов. Во многих (если не во всех) ООП языках вообще не оперируют адресами и получают доступ к объектам не по их адресам. Да и не возможно получить адрес объекта в памяти, т.к. объект этот может лежать в каждый момент времени в разных адресах, при этом оставаясь все тем же объектом.


При чем тут трактовка и реализация? Ведь, если есть возможность, что ссылка будет реализована через указатели, то о ней можно думать так всегда. Это абсолютно ни чему не повредит.

Цитата: Green
Теперь вернемся к C++. Если я могу рассматривать ссылку как просто доступ (ссылание) на объект (а ведь могу же, раз в других языках могу), то зачем мне заморачиваться с адресами? Почему бы мне не продолжать мыслить с т.з. ООП концепции? Зачем переходить на более низкий уровень?


Так ты можешь думать о ссылке все что угодно, я тебя ни к чему не призываю. Я лишь показываю почему твоя трактовка не полная.

Цитата: Green
В C# ты же не рассматриваешь ссылку, как указатель? А в Python? А в Java?


Так я и там могу их так рассматиривать. При чем тут другие языки?

Цитата: Green
Тогда, зачем её рассматривать так в C++ ?


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

ЗЫ. Я с тобой был бы полностью согласен, если бы ссылки не могли бы быть безымянными. Но т.к. ссылки могут быть без имени (так же как объекты), то ссылки - это неяный указатель.

353
26 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: Kogrom
А вообще, если рассуждать как Nixus, то все переменные в C++ - это неявные указатели, даже простые переменные, так как их адрес можно узнать и значит они неявно хранят свой адрес...


Так в этом мире все не однозначно и зависит от точки сборки. :)

3
26 мая 2008 года
Green
4.8K / / 20.01.2000
Цитата: Nixus
Как не выходит, если ты вводишь новые понятия?


Так и понятия не выходят.

Цитата: Nixus
В данном примере не может.


Именно потому, что срок её жизни должен быть не больше срока жизни объекта.

Цитата: Nixus

И func() альтернативное имя возвращаемого объекта, значит они взаимозаменяемы. Да?

Я тебе уже показал, когда есть объект и нет ссылки.


Рекомендую выяснить для себя что есть время существования и область видимости.

Цитата: Nixus

Как это не при чем?


Вот так это, не при чем.

Цитата: Nixus

Почему?
int a = 'c';
Тут нет смысла говорить о int, т.к. мы инициализируем его не int'ом?


Как раз таки int'oм.

Цитата: Nixus

В памяти.
В ней родимой.


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

Цитата: Nixus

Так что же такое это "альтернативное имя"? Просто выражение? Т.е. lvalue ссылающееся на объект? Так при чем тут ссылки тогда?


При том, что ссылка и есть частный случай lvalue ссылающееся на объект.

Цитата: Nixus

Посредством адреса.


Об этом и весь разговор. НЕТ не посредством адреса.
Ты можешь привести конкретные факты?

Цитата: Nixus

При чем тут трактовка и реализация? Ведь, если есть возможность, что ссылка будет реализована через указатели, то о ней можно думать так всегда. Это абсолютно ни чему не повредит.


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

Цитата: Nixus

Так я и там могу их так рассматиривать. При чем тут другие языки?


Ты можешь их так рассматрива, как и считать компьютер магическим устройством.
Но только это бессмысленно, если не сказать глупо.
А другие языки тут при том, что C++ можно рассматривать с т.з. концепции ООП и терминологию связывать с ООП.

Цитата: Nixus

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


Покажи, где оно "что угодно"?
Это скорее твой неявный указатель, что угодно только не указатель.
Кто сказал, что твое представление помогает лучше понять?
Мне вот проще как-то без указателя... адресов и т.п.

Цитата: Nixus

ЗЫ. Я с тобой был бы полностью согласен, если бы ссылки не могли бы быть безымянными. Но т.к. ссылки могут быть без имени (так же как объекты), то ссылки - это неяный указатель.


Только тебе понятная логика...
"т.к. ссылки могут быть без имени, то они - неявный указатель" :D
А зачем ей обязательно имя? Она сама по себе является именем.
При этом заметь, что тебе мешает согласиться всего одна нестройность трактовки.
А сколько оговорок у твоей трактовки? Там же их больше десятка.

353
27 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: Green
Так и понятия не выходят.


Что за стнадарт такой без понятий?

Цитата: Green
Именно потому, что срок её жизни должен быть не больше срока жизни объекта.


А как это следует из того, что ссылка - это альтернативное имя?

Цитата: Green
Рекомендую выяснить для себя что есть время существования и область видимости.


Зачем мне выяснять то, что я уже знаю?

Цитата: Green
Вот так это, не при чем.


Ну если ты там не видишь ссылки, то конечно не при чем. :D

Цитата: Green
Как раз таки int'oм.


Где? Покажи, где в коде int при инициализации?

Цитата: Green
Вот, видишь, налицо твое заблуждение.
Ссылка не обязана храниться в памяти.


Не обязана. И моей трактовке это никак не мешает.

Цитата: Green
При том, что ссылка и есть частный случай lvalue ссылающееся на объект.


Так что такое альтернативное имя? Можешь дать четкое определение?
Разыменование указателя - частный случай lvalue. Получается *p это тоже имя?

Цитата: Green
Об этом и весь разговор. НЕТ не посредством адреса.
Ты можешь привести конкретные факты?


Какие факты? Это трактовка.

Цитата: Green
Так сылка может быть реализована и не через указатель. Значит о ней можно думать не как об указателе?
И кому это повредит?


Никому. Я что против?

Цитата: Green
Ты можешь их так рассматрива, как и считать компьютер магическим устройством.


Так ты тоже можешь рассматривать ссылку как некое магическое имя.

Цитата: Green
Но только это бессмысленно, если не сказать глупо.


В чем глупость? В том что ты однажды прочел в одной книжке и теперь считаешь по-другому?

Цитата: Green
А другие языки тут при том, что C++ можно рассматривать с т.з. концепции ООП и терминологию связывать с ООП.


А что у нас есть станадарт на концепцию ООП? :)

Цитата: Green
Покажи, где оно "что угодно"?


func(), a+b, ... - все что угодно.

Цитата: Green
Это скорее твой неявный указатель, что угодно только не указатель.
Кто сказал, что твое представление помогает лучше понять?


Я сказал.

Цитата: Green
Мне вот проще как-то без указателя... адресов и т.п.


Так пожалуйста, я не против. Однако я не вижу, чем твоя трактовка лучше и понятнее.

Цитата: Green
А зачем ей обязательно имя? Она сама по себе является именем.


Да-да. Имя это такое магическое слово, которое является любым выражением. Тогда я задекларирую переменную вот так:
int a+b;
Ведь, a + b - это имя. Ой, не выходит.

Цитата: Green
При этом заметь, что тебе мешает согласиться всего одна нестройность трактовки.


Так она принципиальна.

Цитата: Green
А сколько оговорок у твоей трактовки? Там же их больше десятка.


Ни одной.

3
27 мая 2008 года
Green
4.8K / / 20.01.2000
Цитата: Nixus
Что за стнадарт такой без понятий?


ISO/IEC14882

Цитата: Nixus

А как это следует из того, что ссылка - это альтернативное имя?


А как ты себе представляешь имя, существующее дольще, чем объект?

Цитата: Nixus

Ну если ты там не видишь ссылки, то конечно не при чем. :D


Ну так объясни, что ты хотел показать тем примером?

Цитата: Nixus

Где? Покажи, где в коде int при инициализации?


См. 8.5/14, 4.5 и 4.7

Цитата: Nixus

Не обязана. И моей трактовке это никак не мешает.


А как же это: "В памяти. В ней родимой."

Цитата: Nixus

Так что такое альтернативное имя? Можешь дать четкое определение?
Разыменование указателя - частный случай lvalue. Получается *p это тоже имя?


Давал выше.
Я - частный случай человека. Ты - тоже частный случай человека. Получается, что я - это ты?

Цитата: Nixus

Какие факты? Это трактовка.


При чем тут трактовка. Ты заявляешь, что ссылка ссылается посредством адреса. Так вот обоснуй свое заявление.

Цитата: Nixus

В чем глупость? В том что ты однажды прочел в одной книжке и теперь считаешь по-другому?


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

Цитата: Nixus

Я сказал.


Цитата: Nixus

Так она принципиальна.


Ну это опять же "ты сказал".

Цитата: Nixus

Ни одной.


И это опять же только ты сказал. Хотя выше я перечислял множество отличий от указателя.
Это указатель, которорый
- неявно разыменовывается,
- не является объектом,
- значение которого может не храниться в памяти,
- над которым нельзя совершать операции,
- неизменяем,
- обязательно инициализируется при создании,
- не может быть инициализирован адресом,
- не может быть инициализирован нулевым значением,
- и т.д. продолжи сам.

353
27 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: Green
ISO/IEC14882


Хороший стандарт, без понятий. :)

Цитата: Green
А как ты себе представляешь имя, существующее дольще, чем объект?


Я себе вообще не представляю как можно динамически создать имя в C++. Имя - это только употребление идентификатора.

Цитата: Green
Ну так объясни, что ты хотел показать тем примером?


То, что ссылки там оперируют объектами через адреса, возвращенные в указателях, и никак иначе не могут.

Цитата: Green
См. 8.5/14, 4.5 и 4.7


А где код?
Может не будем ссылаться на стандарт раз ты сам ему противоречишь? Кажется кто-то про правила игры говорил и это был не я.

Цитата: Green
А как же это: "В памяти. В ней родимой."


Что ты все пытаешься часть своей трактовки впихнуть в мою? Твоя трактовка не отрицает занимание ссылкой памяти и моя не отрицает. В чем проблема?

Цитата: Green
Давал выше.


Видел только, что альтернативное имя - это любое выражение.

Цитата: Green
Я - частный случай человека. Ты - тоже частный случай человека. Получается, что я - это ты?


Если исходить из того что я и ты характеризуются только как "частный случай человека", то да. :) Но у нас же есть отличие, хотябы, в именах на этом форуме.
Однако, это не приближает нас к тому что же такое альтернативное имя и почему *p не альтенативное имя.

Цитата: Green
При чем тут трактовка. Ты заявляешь, что ссылка ссылается посредством адреса. Так вот обоснуй свое заявление.


Как при чем трактовка? У ссылки вдруг появилось определение? Я не заявляю, а излагаю трактовку. Ты путаешь.

Цитата: Green
В том, что в этих языках не оперируют адресами. И объекты там лежат не по конкретным адресам.


При чем тут трактовка и реализация?

Цитата: Green
Ну это опять же "ты сказал".


Ну объясни как имя можно возвратить из функции?

Цитата: Green
И это опять же только ты сказал. Хотя выше я перечислял множество отличий от указателя.


А где я говорю, что ссылка - это указатель и они одиноаковы? Ты приписываешь мне не мои слова, а свои фантазии.
Первичным в моей трактовке является то, что ссылка ссылается на объекты посредством адреса. Перечитай на что ты возмутился. Остальное лишь следствие, что ссылку можно назвать неявным указателем, т.к. в C++ нет других сущностей оперирующих адресами, кроме указателей.

ЗЫ. Давай определимся сылаемся мы на стандарт или нет?

3
27 мая 2008 года
Green
4.8K / / 20.01.2000
Цитата: Nixus

Я себе вообще не представляю как можно динамически создать имя в C++. Имя - это только употребление идентификатора.


А я не понимаю, как можно создать "неявный указатель", который указателем и не является.

Цитата: Nixus

То, что ссылки там оперируют объектами через адреса, возвращенные в указателях, и никак иначе не могут.


Никак не вижу этого из твоего примера.
Ссылки там ссылаются на объекты, а адреса опять же не при чем.
Если ссылки ссылаются через адреса, тогда зачем там оператор * ?
Как только ты разыменовал указатель, ты работаешь с объектом. Всё, про указатель можешь забыть!
Так что твои malloc-и в примере совершенно лишние.

Цитата: Nixus

А где код?
Может не будем ссылаться на стандарт раз ты сам ему противоречишь? Кажется кто-то про правила игры говорил и это был не я.


А при чем тут правила игры и стандарт в данном случае. Этот твой пример как-то оперирует ссылками? К чему он тут вообще?

Цитата: Nixus

Что ты все пытаешься часть своей трактовки впихнуть в мою? Твоя трактовка не отрицает занимание ссылкой памяти и моя не отрицает. В чем проблема?


Твоя именно обязывает занятие ссылкой памяти, иначе, где ей хранить адрес?

Цитата: Nixus

Видел только, что альтернативное имя - это любое выражение.



Цитата: Nixus

Как при чем трактовка? У ссылки вдруг появилось определение? Я не заявляю, а излагаю трактовку. Ты путаешь.


Не тупи. Обоснуй, почему ссылка хранит и ссылается по адресу?

Цитата: Nixus

При чем тут трактовка и реализация?


При чем тут реализация? Я не говори о реализации, я говорил о ООП и языках.
Где ты нашел реализацию?

Цитата: Nixus

Ну объясни как имя можно возвратить из функции?


А как можно создать неявный указатель?

Цитата: Nixus

А где я говорю, что ссылка - это указатель и они одиноаковы? Ты приписываешь мне не мои слова, а свои фантазии.


Ну так и альтернативное имя - это не идентификатор, а способ доступа схожий со способом обычных идентификаторов.
Только вот ты придрался к единственному, что имя - это обязательно идентификатор. А то что твой "неявный указатель" не является указателем по целому перечню пунктов ты как-то упускаешь.

Цитата: Nixus

Первичным в моей трактовке является то, что ссылка ссылается на объекты посредством адреса. Перечитай на что ты возмутился. Остальное лишь следствие, что ссылку можно назвать неявным указателем, т.к. в C++ нет других сущностей оперирующих адресами, кроме указателей.


Ну я от этого и не отказываюсь. Ссылка не оперирует адресом, не ссылается на объекты посредством адреса. Она ссылается на объекты так же, как и имя (идентификатор).

Цитата: Nixus

ЗЫ. Давай определимся сылаемся мы на стандарт или нет?


А что нам мешает на него ссылаться? То что у него нет адреса? :D :D

353
27 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: Green
А что нам мешает на него ссылаться? То что у него нет адреса? :D :D


Твоя трактовка не соответсвует стандарту, т.к. в нем нет "альтернативного имени". Так же и моя не соответсвует т.к. я представляю ссылку как нечто хранящее адрес.
Соответственно, стандарт уже нарушен и приведение цитат и ссылок на него не правомерно. Так что давай определяться или мы не используем ссылки на него, т.к. обе трактовки его нарушают, или заканчиваем спор, т.к. он не имеет смысла тогда.

240
28 мая 2008 года
aks
2.5K / / 14.07.2006
Цитата: Nixus
Твоя трактовка не соответсвует стандарту, т.к. в нем нет "альтернативного имени".


Я не понимаю, а при чем тут соответсвие стандарту специально введенного термина из какой либо "трактовки"? Есстественно термина такого там нет, главное чтоб описывался смысл этого термина и он не противоречил стандарту. Смысл как то противоречит? )

353
28 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: aks
Я не понимаю, а при чем тут соответсвие стандарту специально введенного термина из какой либо "трактовки"? Есстественно термина такого там нет, главное чтоб описывался смысл этого термина и он не противоречил стандарту. Смысл как то противоречит? )


Неявного указателя там тоже нет, однако мне это "вминялось в вину" и до сих пор происходит сравнение его с указателем и на этой почве попытки показать глупость моей трактовки.
Выражение и имя - это разные вещи. Имя - это только часть выражения, а точнее употребление идентификатора.
Одинаковая ситуация у альтернативного имени и имени (по стандарту) с неявным указателем и указателем (по стандарту). Какой смысл ссылаться на стандарт когда обе трактовки вводят свои сущности?

ЗЫ. Кстати, раз ты решил вернуться в дисскусию, где обещанные тобой главы стнадарта где описывается, что же такое ссылка, и варианты реализаций, кучу которых ты можешь напридумывать?

240
28 мая 2008 года
aks
2.5K / / 14.07.2006
Цитата: Nixus
Неявного указателя там тоже нет, однако мне это "вминялось в вину" и до сих пор происходит сравнение его с указателем и на этой почве попытки показать глупость моей трактовки.


Ну я думаю имеется ввиду, что твое определение противоречит некоторым пунктам стандарта, а не то что там такая формулировка есть. Суть то не в том какая трактовка - а в том чтобы она была не сама не противоречива, не противоречила стандарту и подходила под описание там.


Цитата: Nixus

ЗЫ. Кстати, раз ты решил вернуться в дисскусию, где обещанные тобой главы стнадарта где описывается, что же такое ссылка, и варианты реализаций, кучу которых ты можешь напридумывать?


Да, давно не был тут - работы навалило. Главы с описанием ссылок тут уже без меня привели - видел пока перечитывал.

Варианты реализаций без адреса объекта в памяти внутри ссылки - ну сейчас подумаем.
Например вариант от Одисея - ссылка ссылается по индексу в массиве весх существующих объектов. Чтобы не было вопросов как быть при разыменовании какого то адреса и присвоении ссылки - если оно не проходит - получаем AV, проходит - добавляем в массив.

Или так: сыслка ключ в многомерном ассоциативном массиве объектов. )))
Ну вобщем сходу думать лениво - на досуге могу придумать что нибудь попрактичней. )

353
28 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: aks
Ну я думаю имеется ввиду, что твое определение противоречит некоторым пунктам стандарта, а не то что там такая формулировка есть.


Я не даю определение - я даю трактовку.
Твоя трактовка не противоречит стандарту?

Цитата: aks
Суть то не в том какая трактовка - а в том чтобы она была не сама не противоречива, не противоречила стандарту и подходила под описание там.


Обоснуй. Покажи противоречия в том, что ссылка хранит адрес и поведением ссылки, описанным в стандарте.
И покажи трактовку, которая полностью укалыдвается в стандарт.

Цитата: aks
Да, давно не был тут - работы навалило. Главы с описанием ссылок тут уже без меня привели - видел пока перечитывал.


Так, понятно, значит не можешь.

Цитата: aks
Варианты реализаций без адреса объекта в памяти внутри ссылки - ну сейчас подумаем.
Например вариант от Одисея - ссылка ссылается по индексу в массиве весх существующих объектов. Чтобы не было вопросов как быть при разыменовании какого то адреса и присвоении ссылки - если оно не проходит - получаем AV, проходит - добавляем в массив.
Или так: сыслка ключ в многомерном ассоциативном массиве объектов. )))


А чем этот индекс - не адрес? Индекс в памяти - кажется так стандарт определяет адрес.
Ты только подтверждаешь мою трактовку, что ссылка хранит значение. А ссылка (по стандарту) не обязана же занимать память, поэтому в доказательство своей позиции (что ссылка не обязана ничего хранить и это всего лишь другое имя) приведи реализацию ссылки без хранения ею какого-либо значения.

Цитата: aks
Ну вобщем сходу думать лениво - на досуге могу придумать что нибудь попрактичней. )


Ну так подумай, я не тороплюсь.

240
28 мая 2008 года
aks
2.5K / / 14.07.2006
Цитата: Nixus
Я не даю определение - я даю трактовку.
Твоя трактовка не противоречит стандарту?


Ты вводишь определения. И описываешь их в "своей трактовке".
А никакую свою я вобще не приводил. Это вы тут спорите о трактовках, я же пытаюсь вам общий язык найти помочь. Ато такое чувство что не понимаете, что соперник говорит. )

Цитата: Nixus

Так, понятно, значит не можешь.


Мне тоже понятно - что не желаешь читать, что пишут тебе. Не поверю, что ты не видел те цифры которые здесь были. Вот если честно не видел - специально найду и выложу еще раз. )


Цитата: Nixus

А чем этот индекс - не адрес? Индекс в памяти - кажется так стандарт определяет адрес.


Я знал, что ты это спросишь. )
А тем что ты говорил, что ссылка это указатель с другим интерфейсом. И значит хранит тот же адрес, что и указатель на этот объект, т.е. адрес самого объекта. А она хранит лишь индекс в массиве, где может уже находиться адрес объекта. Выходит не совпадают адреса? )

А реализация с ключем в ассоциативном массиве? нету вобще адреса - сама ссылка и есть ключ. )

Цитата: Nixus

Ты только подтверждаешь мою трактовку, что ссылка хранит значение. А ссылка (по стандарту) не обязана же занимать память, поэтому в доказательство своей позиции (что ссылка не обязана ничего хранить и это всего лишь другое имя) приведи реализацию ссылки без хранения ею какого-либо значения.


Я прошлый раз обещал показать реализацию сылки не через указатели, а не ссылку без значения. ) Вот они. И они альтернативные твоей, значит это не единственный возможный способ организации ссылок.
Можно будет подумать и над ссылкой без значения - но это будет на несколько другом уровне.

361
28 мая 2008 года
Odissey_
661 / / 19.09.2006
Цитата: Nixus
А чем этот индекс - не адрес? Индекс в памяти - кажется так стандарт определяет адрес.
Ты только подтверждаешь мою трактовку, что ссылка хранит значение. А ссылка (по стандарту) не обязана же занимать память, поэтому в доказательство своей позиции (что ссылка не обязана ничего хранить и это всего лишь другое имя) приведи реализацию ссылки без хранения ею какого-либо значения.


Индекс в памяти может и адрес, только речь то идет не о индексе в памяти, а о индексе в структуре данных. Разница ясна?

Пример кончено не важный, но первое что пришло в голову. Придется работать с ним. Что хранить, где хранить... Вот ссылка в такой реализации - индекс, например.

void foo::a(Refer r); // Refer - наш тип реализующий механизм ссылок
...
f.a(4); // 4 - это ссылка.

Что хранит 4 ? =)

Теперь по сути.
Не знаю почему вы отказались от общего понятия ссылки и указателя. Общее складывается из частных случаев, и рассматривая частный случай, не рассматривать общий... странно. Ссылка и указатель в языках программирования разные понятия, и нет ни каких предпосылок определять ссылку как вырожденый случай указателя.
Более того, такая трактовка ссылки как "неявный указатель" некорректна и может вводить в заблуждение при изучении языка, когда расчитываешь найти те свойства которых заведомо нет.

2
28 мая 2008 года
squirL
5.6K / / 13.08.2003
Цитата: Odissey_

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


особенно, если начать изучать язык, где есть ссылки и нету указателей :)

11
28 мая 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: squirL
особенно, если начать изучать язык, где есть ссылки и нету указателей :)



Особенно в 1Цэ
Документ.Ссылка (Документ.НеявныйУказатель :))) )
Справочник.Ссылка

А указателей нету...

353
28 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: aks
Ты вводишь определения. И описываешь их в "своей трактовке".
А никакую свою я вобще не приводил. Это вы тут спорите о трактовках, я же пытаюсь вам общий язык найти помочь. Ато такое чувство что не понимаете, что соперник говорит. )


Да, но возражал ты только мне. С Green'ом ты стало быть согласен.

Цитата: aks
Мне тоже понятно - что не желаешь читать, что пишут тебе. Не поверю, что ты не видел те цифры которые здесь были. Вот если честно не видел - специально найду и выложу еще раз. )


Цифры я видел, но большиснтво из них касалось не ссылок. Всеобъемлещего описания никто не приводил, а ты кажется обещал.

Цитата: aks
Я знал, что ты это спросишь. )


А тем что ты говорил, что ссылка это указатель с другим интерфейсом.[/QUOTE]
Как реализация связана с трактовкой?

Цитата: aks
И значет адрес хранит тот же адрес, что и указатель на этот объект
А она хранит лишь индекс в массиве, где может уже находиться адрес.


Т.е. опосредованно, но адрес таки хранит?

Цитата: aks
Выходит не совпадают адреса? )


А кто утверждал что совпадают?

Цитата: aks
А реализация с ключем в ассоциативном массиве? нету вобще адреса - сама ссылка и есть ключ. )


Ключем ассоциативного массива является значение объекта. Значит сссылка - это объект?

Цитата: aks
И они альтернативные твоей, значит это не единственный возможный способ организации ссылок.


Я не утверждаел что единственный. Я говоил что трактование ссылки как нечта содержащиего адрес - самое полное.

353
28 мая 2008 года
Nixus
840 / / 04.01.2007
Как вас много. :)
Для начала хочеться услышать от тебя что такое ссылка. А то ты тут рассказываешь нам про отличия ссылки от указателя, однако что же такое ссылка не соизволил сказать.

Цитата: Odissey_
Индекс в памяти может и адрес, только речь то идет не о индексе в памяти, а о индексе в структуре данных. Разница ясна?


Т.е. скатываемся к реализации? Память - это место где храняться объекты и не важно как она реализована.

Цитата: Odissey_
Пример кончено не важный, но первое что пришло в голову. Придется работать с ним. Что хранить, где хранить... Вот ссылка в такой реализации - индекс, например.

void foo::a(Refer r); // Refer - наш тип реализующий механизм ссылок
...
f.a(4); // 4 - это ссылка.

Что хранит 4 ? =)


4 - это не ссылка, это константа, которая инициализирует объект, созадающийся при вызове функции. При чем тут 4?
И при чем тут ссылка и тип, который реализует функционал ссылки в программе? Это разные вещи.

Цитата: Odissey_
Теперь по сути.
Не знаю почему вы отказались от общего понятия ссылки и указателя.


Кто решает что и где общее и почему общее самое верное? Большинство народу думает что тюль женского рода, они по твоему правы?

Цитата: Odissey_
Общее складывается из частных случаев, и рассматривая частный случай, не рассматривать общий... странно.


Где я отменяю общие свойтсва ссылки? Как моя трактовка отменяет какие-то свойства ссылки?

Собственно вопрос.. ты хоть понял суть трактовки или как и все начинаешь спорить не разобравшись как религиозный фанатик?

Ссылка и указатель в языках программирования разные понятия
Ох... Ты похоже не читал весь топик, раз опять пишеш глупости. Я уже наверное 100 раз писал: Ссылка и указатель - разные вещи, Р А З Н Ы Е!
Однако, я считаю, что ссылку можно рассматривать как нечно хранящее адрес. Так же как и указатель хранит адрес, однако интерфейс у них разный. А так как доступ по адресу можно получить (согласно станадрту) только разыменовав указатель, то можно рассматривать ссылку как нечно неявно разыменовывающее адрес (указатель).
Ключевой момент это внутренне представление (адрес), а интерфейс использования.

Цитата: Odissey_
, и нет ни каких предпосылок определять ссылку как вырожденый случай указателя.


Есть и их много. В подавляющем большинстве случаев они взаимозаменяемы.

Цитата: Odissey_
Более того, такая трактовка ссылки как "неявный указатель" некорректна и может вводить в заблуждение при изучении языка, когда расчитываешь найти те свойства которых заведомо нет.


Так какие заблуждения? У меня, например, возникают заблуждения когда ссылку рассматривают как другое имя.

361
28 мая 2008 года
Odissey_
661 / / 19.09.2006
Ты не кипятись =).
Я с тобой не спорил, лишь заметил что трактовкая "неявный указатель" вводит в заблуждения и описал почему.

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

Просил реализацию механизма ссылок - получил. Да он не безупречный, но основную идею помоему отражает.

Потом, не надо думать что все на тебя нападают, к чему эти выпады про "глуппость", "фанатик" ? Я вот вижу фразу
Цитата:
В подавляющем большинстве случаев они взаимозаменяемы.

и меня от нее в дрожь бросает, но я терплю =)

Давать определение ссылки не буду, дабы не умножать демагогию.

5
28 мая 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: Nixus
Однако, я считаю, что ссылку можно рассматривать как нечно хранящее адрес. Так же как и указатель хранит адрес, однако интерфейс у них разный. А так как доступ по адресу можно получить (согласно станадрту) только разыменовав указатель, то можно рассматривать ссылку как нечно неявно разыменовывающее адрес (указатель).

А есть ещё языки описания хардвэйра. Типа VHDL или Handel C. Ссылки там есть. Указателей нету :D
И ссылку уж точно через указатель не определить, скорее как привязку к электрическим сигналам слайса (минимальный программируемый логический модуль) ПЛИС, а все объекты по своей сути статичны. Таким образом все ссылки на объекты разрешаются на этапе компиляции - генерирования нет-листа для прошивки ПЛИС.

З.Ы. Будем утверждать что "адрес" это координаты слайса в ПЛИС?

353
29 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: Odissey_
Я с тобой не спорил, лишь заметил что трактовкая "неявный указатель" вводит в заблуждения и описал почему.


Да я не вижу почему, вот серьезно. И я не настаиваю на единственности своей позиции. Я лишь отстаиваю ее право на жизнь.

Цитата: Odissey_
Просил реализацию механизма ссылок - получил. Да он не безупречный, но основную идею помоему отражает.


Я хотел увидеть реализацию ссылок без хранения ими каких либо знаений, а реализация с каким-либо значение сводиться к адресу/индексу, что совпадает с моей трактовкой.

Цитата: Odissey_
Потом, не надо думать что все на тебя нападают, к чему эти выпады про "глуппость", "фанатик" ?


Просто мне неоднократно приходиться разжевывать свою позицию, т.к. все видят только слово "указатель" почему-то.

Цитата: Odissey_
Я вот вижу фразу и меня от нее в дрожь бросает, но я терплю =)


Однако это так, конечно только для тех языков где есть и ссылки, и указатели :).

353
29 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: hardcase
А есть ещё языки описания хардвэйра. Типа VHDL или Handel C. Ссылки там есть. Указателей нету :D


Тебе показать языки, в которых есть указатели и нет ссылок. И языки где нет ни того ни другого? К чему этот опус в данном вопросе?

Цитата: hardcase
И ссылку уж точно через указатель не определить


Так ты не дал ни одного определения ссылки, а уже утверждаешь как ее можно определить, а как нельзя.
Как указатель ее определить нельзя, а вот как нечто ссылающееся через адрес - легко.

Цитата: hardcase
скорее как привязку к электрическим сигналам слайса (минимальный программируемый логический модуль) ПЛИС, а все объекты по своей сути статичны. Таким образом все ссылки на объекты разрешаются на этапе компиляции - генерирования нет-листа для прошивки ПЛИС.
З.Ы. Будем утверждать что "адрес" это координаты слайса в ПЛИС?


А как связяана ПЛИС со ссылками?

ЗЫ. Приведи свою трактовку, чтобы было о чем говорить. И вообще что ты пытаешься опровергнуть или доказать?

5
29 мая 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: Nixus
Так ты не дал ни одного определения ссылки, а уже утверждаешь как ее можно определить, а как нельзя.


Ок. Предпочитаю мыслить широко и не замыкаться на одном языке. Ссылка - это способ обращения к объекту через контекстно-зависимое имя в тексте программы (т.е. имя, которое несет смысл только в некотором месте текста - имя формального параметра например). Т.о. любое имя, связанное с объектом (будь то функция, класс и локальная переменная) в тексте программы будет ссылкой на него. type& в С++ - это всего лишь способ получения еще одной ссылки на объект. Именно из-за возможности создания множества ссылок на один и тот же объект возникает потребность в использовании механизма указателей внутрях ссылки - но это всеголишь частный случай.

Цитата: Nixus

А как связяана ПЛИС со ссылками?

В ПЛИС нет адресов. Но ссылки в моей трактовке имеют место быть.

[quote=Nixus]
Просто мне неоднократно приходиться разжевывать свою позицию, т.к. все видят только слово "указатель" почему-то.[/quote]
Мы на русском языке говорим. Для русскоязычного человека в словосочетании "неявный указатель" слово указатель (существительное) - главное. Так что определение нескладное уже по самой форме, и вводит слушателя в заблуждение.

353
29 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: hardcase
Ок. Предпочитаю мыслить широко и не замыкаться на одном языке.


Ты знаешь что в разных языках свойтсва ссылки разнятся?

Цитата: hardcase
Ссылка - это способ обращения к объекту через контекстно-зависимое имя в тексте программы (т.е. имя, которое несет смысл только в некотором месте текста - имя формального параметра например). Т.о. любое имя, связанное с объектом (будь то функция, класс и локальная переменная) в тексте программы будет ссылкой на него.


Устал показывать пример. Ссылка есть, а где тут имя?

 
Код:
int& func();
func() = 10;


Цитата: hardcase
type& в С++ - это всего лишь способ получения еще одной ссылки на объект.


Т.е. все переменные в C++ это ссылки?

Цитата: hardcase
Именно из-за возможности создания множества ссылок на один и тот же объект возникает потребность в использовании механизма указателей внутрях ссылки - но это всеголишь частный случай.


Так почему нельзя ее так рассматривать всегда? Что от этого измениться?

Цитата: hardcase
В ПЛИС нет адресов. Но ссылки в моей трактовке имеют место быть.


Так там и ссылок нет.

Цитата: hardcase
Мы на русском языке говорим. Для русскоязычного человека в словосочетании "неявный указатель" слово указатель (существительное) - главное. Так что определение нескладное уже по самой форме, и вводит слушателя в заблуждение.


Что такое "Бритва Оккама" знаешь?

ЗЫ. Прежде чем то-то писать перечитай всю тему, чтобы не боянить. Договорились?
ЗЫЫ. Так что ты пытаешься опровергнуть или доказать?

3
29 мая 2008 года
Green
4.8K / / 20.01.2000
Цитата: Nixus
Твоя трактовка не соответсвует стандарту, т.к. в нем нет "альтернативного имени". Так же и моя не соответсвует т.к. я представляю ссылку как нечто хранящее адрес.
Соответственно, стандарт уже нарушен и приведение цитат и ссылок на него не правомерно.
Так что давай определяться или мы не используем ссылки на него, т.к. обе трактовки его нарушают, или заканчиваем спор, т.к. он не имеет смысла тогда.


Это ещё почему? С чего он нарушен?
В стандарте нет определения ссылки, только и всего.
Моя трактовка никак не нарушает стандарт.
Я и далее намереваюсь ссылаться на стандарт там, где в этом будет необходимость.

Цитата: Nixus
Неявного указателя там тоже нет, однако мне это "вминялось в вину" и до сих пор происходит сравнение его с указателем и на этой почве попытки показать глупость моей трактовки.


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

Цитата: Nixus

[QUOTE=Odissey_]
, и нет ни каких предпосылок определять ссылку как вырожденый случай указателя.


Есть и их много. В подавляющем большинстве случаев они взаимозаменяемы.
[/QUOTE]
Много? Перечисли.
IMHO куда логичнее определять указатель через ссылку.

Цитата: Nixus

Устал показывать пример. Ссылка есть, а где тут имя?
 
Код:
int& func();
func() = 10;


Т.е. все переменные в C++ это ссылки?


А я устал повторять, что "альтернативное имя" - это не идентификатор.
Ссылка - всего лишь способ доступа к объекту, схожий (идентичный) с доступом по имени.

Переменная = имя + объект
Все имена в С++ используют способ аналогичный тому, что используют ссылки. В принципе, можно сказать, что имена переменных - это и есть ссылки на объекты.

353
30 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: Green
Это ещё почему? С чего он нарушен?


С того что имя там четко определено и оно не может быть произвольным выражением.

Цитата: Green
В стандарте нет определения ссылки, только и всего.
Моя трактовка никак не нарушает стандарт.
Я и далее намереваюсь ссылаться на стандарт там, где в этом будет необходимость.


Значит больше не ссылаемся на то что ссылка это не объект и не обязана хранить значние (занимать память)?

Цитата: Green
"Вменялось в вину" не отсутствие в стандарте "неявного указателя", а то, что термин "указатель", который есть в стандарте, применим с огромной (а несколько пунктов) натяжкой.


Значит будем мериться количеством пунктов? :D

Цитата: Green
Много? Перечисли.


Проще скзать когда они не взаимозаменимы:
1. Ссылку нельзя использование в union.
2. Ссылку обязательно нужно инициализировать.
В остальных случаях - пожалуйста.

Цитата: Green
IMHO куда логичнее определять указатель через ссылку.


Т.е. указатель это ссылка?

Цитата: Green
Ссылка - всего лишь способ доступа к объекту, схожий (идентичный) с доступом по имени.
То же самое можно сказать про указатель.


Указатель - способ доступа к объекту, схожий (идентичный) с доступом по имени. :)

3
30 мая 2008 года
Green
4.8K / / 20.01.2000
Цитата: Nixus
С того что имя там четко определено и оно не может быть произвольным выражением.


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

Цитата: Nixus

Значит больше не ссылаемся на то что ссылка это не объект и не обязана хранить значние (занимать память)?


Именно на это и ссылаемся.
Ты так активно пытаешься отвертеться от стандарта... :)
Видимо, ты и сам понимаешь, что в этом и слабость твоей трактовки.

Цитата: Nixus

Значит будем мериться количеством пунктов? :D


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

Цитата: Nixus

Проще скзать когда они не взаимозаменимы:
1. Ссылку нельзя использование в union.
2. Ссылку обязательно нужно инициализировать.
В остальных случаях - пожалуйста.


Ну это ведь далеко не все.

Цитата: Nixus

Т.е. указатель это ссылка?


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

Цитата: Nixus

Указатель - способ доступа к объекту, схожий (идентичный) с доступом по имени. :)


Вижу сам улыбаешься той фигне, которую сказал :)

353
30 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: Green
А никто не говорил об имени, разговор был об альтернативном имени.
Кроме того, есть два случая:
1) именованная ссылка,
2) неименнованная.
В первом случае вообще все попадает под стандарт. Во втором несколько сложнее. Но для понимания сути ссылки хватает и первого варианта.


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

Цитата: Green
Именно на это и ссылаемся.


Занчит ссылаемся и на то, что имя не может быть выражением.

Цитата: Green
Ты так активно пытаешься отвертеться от стандарта... :)
Видимо, ты и сам понимаешь, что в этом и слабость твоей трактовки.


Я пытаюсь понять, как так выходит, что ты якобы придерживаешься стандарта, а именем называешь все что угодно. И не понимаю. Поэтому либо ты объясняешь как это, либо не ссылаемся. Все просто.
Я не отрицаю что моя трактовка не укладывается в стандарт. Однако и твоя туда не укладывается.

Цитата: Green
А почему бы нет. Если ты утверждаешь, что твоя трактовка понятнее.


Где я утверждал что моя трактовка понятнее? Понятность - это вещь субъективная.
Я говорил, что она полнее, т.к. она легко объясняет оба случая, а твоя (как ты сам признался) только первый.

Цитата: Green
Ну это ведь далеко не все.


Ну так покажи где я не могу использовать ссылку, там же где и указатель, кроме этих двух случаев.

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


Отлично. Где это в стандарте написано, что мы получаем ссылку?
Ссылка - это такой незримый дух, который присутствует всюду. :D

Цитата: Green
Вижу сам улыбаешься той фигне, которую сказал :)


Нет, улыбаюсь я твоей "фигне", которая описывает как ссылку, так и указатель. Что в моей "фигне" не верно по отношению к указателю?

3
30 мая 2008 года
Green
4.8K / / 20.01.2000
Цитата: Nixus

Занчит ссылаемся и на то, что имя не может быть выражением.


А кто говорил обратное?

Цитата: Nixus

Я пытаюсь понять, как так выходит, что ты якобы придерживаешься стандарта, а именем называешь все что угодно. И не понимаю. Поэтому либо ты объясняешь как это, либо не ссылаемся. Все просто.
Я не отрицаю что моя трактовка не укладывается в стандарт. Однако и твоя туда не укладывается.


Ты тоже указателем называешь что угодно?
Ещё раз:
Для именнованной ссылки все укладывается лучше некуда.
Для неименнованной ссылки мы так же получаем доступ к объекту, как и при использовании имени. Имени нет, а доступ есть. Поэтому и говорю про альтернативное имя.

Цитата: Nixus

Где я утверждал что моя трактовка понятнее? Понятность - это вещь субъективная.
Я говорил, что она полнее, т.к. она легко объясняет оба случая, а твоя (как ты сам признался) только первый.


Да с чего она полнее?
Тем что она запутанно объясняет два случая, при этом вводя кучу других непонятных случаев?

Цитата: Nixus

Ну так покажи где я не могу использовать ссылку, там же где и указатель, кроме этих двух случаев.


int* p = 0;
int* p = addr;
p++;
p != NULL;
static_cast<char*>(p);
int i = (int)p;
и т.д.

и обратное:
const int &r = 5;

Цитата: Nixus

Отлично. Где это в стандарте написано, что мы получаем ссылку?
Ссылка - это такой незримый дух, который присутствует всюду. :D


Ссылка - способ доступа к объекту идентичный доступу по имени.
Разыменовывая указатель мы так же получаем доступ к объекту.
И это прописано в стандарте.
В общем случае доступ по ссылке не отличим от доступа по имени или через разыменование. Да вот такой "незримый дух", который позволяет оперировать с объектом. А "незримый" и "дух" потому, что само по себе объектом не является.

Цитата: Nixus

Нет, улыбаюсь я твоей "фигне", которая описывает как ссылку, так и указатель. Что в моей "фигне" не верно по отношению к указателю?


То, что через указатель можно получить доступ к объекту только через разыменование, а не напрямую, как в случае со ссылкой.
Ты отличаешь доступ к объекту по имени от доступа через указатель?
А доступ по имени от доступа через ссылку?
p->val;
r.val
Разницу видишь?

353
30 мая 2008 года
Nixus
840 / / 04.01.2007
Цитата: Green
А кто говорил обратное?


Так ты утверждаешь что альтернативное имя не противоречит стандарту.

Цитата: Green
Ты тоже указателем называешь что угодно?


Нет. Я использую термин неявный указатель только потому что ссылка сылает посредством адреса, так же как и указатель. Не более. Я это неоднократно писал.

Цитата: Green
Ещё раз:
Для именнованной ссылки все укладывается лучше некуда.


Так зачем нужны трактовки, которые объясняют лишь частные случаи?

Цитата: Green
Для неименнованной ссылки мы так же получаем доступ к объекту, как и при использовании имени.


Мы получаем доступ к объекту и при использовании указателя.

Цитата: Green
Да с чего она полнее?


Потому что для нее нет разницы именованная ссылка или нет. Поэтому эта трактовка полнее и универасльнее.

Цитата: Green
Тем что она запутанно объясняет два случая, при этом вводя кучу других непонятных случаев?


Да где ж запутано? Я не ввожу новых свойств для ссылки. Что следует из того, что она ссылается посредством адреса?
Моя трактовка вводит только одно, что ссылка ссылается посредством адреса и все. Что дает мне право в рамках трактовки назвать ее неявным указателем. А не ссылка - это указатель, поэтому она ссылается посредством адреса. Разницу чувствуешь?

Цитата: Green

int* p = 0;
int* p = addr;
p != NULL;
static_cast<char*>(p);
int i = (int)p;

const int &r = 5;


Ну вот заменяю:
int& r = *(int*)0;
int& r = *addr;
&r != NULL;
static_cast<char*>(&r);
int i = (int)&r;

const int __i = 5;
const int* r = &__i;

Ты мне опять показываешь различия интерфейса, однако как это соотноситься с тем, что ссылку нельзя рассматривать как нечно хранящее адрес - не понятно.

Цитата: Green
p++;


Ну путь с натяжкой будет №3.

Цитата: Green
Ссылка - способ доступа к объекту идентичный доступу по имени.
Разыменовывая указатель мы так же получаем доступ к объекту.
И это прописано в стандарте.


Так где там написано, что разыменование указателя возвращает ссылку?

Цитата: Green
В общем случае доступ по ссылке не отличим от доступа по имени или через разыменование.


Так как это противоречит тому, что сссылка сылается посредством адреса?

Цитата: Green
То, что через указатель можно получить доступ к объекту только через разыменование, а не напрямую, как в случае со ссылкой.


А как это противоречит тому, что было написано:
Указатель - способ доступа к объекту, схожий (идентичный) с доступом по имени.
Где тут про прямой, косвенный и пр?

3
30 мая 2008 года
Green
4.8K / / 20.01.2000
Цитата: Nixus

Так ты утверждаешь что альтернативное имя не противоречит стандарту.


Именно так, не противоречит.

Цитата: Nixus
Нет. Я использую термин неявный указатель только потому что ссылка сылает посредством адреса, так же как и указатель. Не более. Я это неоднократно писал.


А где сказано, что ссылка ссылается посредством адреса?

Цитата: Nixus

Так зачем нужны трактовки, которые объясняют лишь частные случаи?

Потому что для нее нет разницы именованная ссылка или нет. Поэтому эта трактовка полнее и универасльнее.


Моя трактовка объясняет оба случая. Только в первом она полностью (без каких либо оговорок) соответствует стандартному определению имени. А во втором стоит оговорится.
Ты считаешь, что множество оговорок, сопутствующие твоей трактовке, повышают её полноту и универсальность?

Цитата: Nixus

Мы получаем доступ к объекту и при использовании указателя.


Только через операцию разыменования, а не напрямую.

Цитата: Nixus

Да где ж запутано? Я не ввожу новых свойств для ссылки. Что следует из того, что она ссылается посредством адреса?
Моя трактовка вводит только одно, что ссылка ссылается посредством адреса и все.


Да вот как раз адрес и запутывает. Адрес не при чем.
Есть и др. запутки, которые уже не раз обсуждались и на грабли которых ты наступаешь и в этом своем посте (см. ниже).

Цитата: Nixus

А не ссылка - это указатель, поэтому она ссылается посредством адреса. Разницу чувствуешь?


Я фразы то не понял, не то чтоб разницу почувствовать... :)

Переходим к граблям по которым ты со своей трактовкой ходишь:

Цитата: Nixus

Ну вот заменяю:
int& r = *(int*)0;


Это ill-formed, а мой пример well-formed.
Надеюсь, ты разницу понимаешь. Так что эта твоя "замена" просто... глупость.

Цитата: Nixus

int& r = *addr;


Мой пример показывал, как указатель инициализируется конкретным значением адреса. Здесь такой инициализации не вижу.

Цитата: Nixus

&r != NULL;


В моем примере проверялось значение указателя, не является ли оно null pointer-ом.
Выражение могло вернуть true или false.
В твоей "замене" берется адрес объекта (ссылка тут не при чем) и проверяется на null-pointer. Сравнение бессмысленное, т.к. всегда будет true.

Цитата: Nixus

static_cast<char*>(&r);
int i = (int)&r;


Опять же, при чем тут ссылка, если ты берешь указатель на объект?

Цитата: Nixus

const int __i = 5;
const int* r = &__i;


В моем примере была дополнительная переменная?!
Как ты собираешься вводить её в таком случае:

 
Код:
void func(const T&);

Не знаю, на что ты надеялся, "замена" не засчитана.

И еще такой примерчик:
 
Код:
T& r = T();

какую альтернативу предложишь?

Цитата: Nixus

Ты мне опять показываешь различия интерфейса, однако как это соотноситься с тем, что ссылку нельзя рассматривать как нечно хранящее адрес - не понятно.


А при чем тут интерфейс? Ссылка просто не хранит адрес и все тут.

Цитата: Nixus

Так где там написано, что разыменование указателя возвращает ссылку?


Именно это не прописано, однако, что мне мешает так трактовать?
Мы же вроде бы о трактовках говорим?

Цитата: Nixus

Так как это противоречит тому, что сссылка сылается посредством адреса?


Да не нужен ей никакой адрес, чтоб ссылаться.

Цитата: Nixus

А как это противоречит тому, что было написано:
Указатель - способ доступа к объекту, схожий (идентичный) с доступом по имени.
Где тут про прямой, косвенный и пр?


"Идентичный - Полностью совпадающий или точно соответствующий чему-л.; тождественный."
Ты не видишь разницы между доступом по имени и по указателю?
Т.е. даже внешне никакой разницы?

 
Код:
obj.val;
ptr->val;
95K
10 февраля 2015 года
flooder
1 / / 10.02.2015
Интересно, знатоки С++ еще не уволены?
Кто тут считает, что ссылка это просто псевдоним?
Что ссылка не имеет размера, что ссылка не имеет своего адреса,
что ссылка не имеет значения? Ничего подобного, ссылка имеет и
размер, и свой адрес, и значение, равное адресу объекта на который
ссылается. Ссылка - это кастрированный указатель. У ссылки доступ к
к практически всем свойствам указателя заблокирован. Если вас не
пускают в элитный ресторан, то это не значит что там не кормят.

Небольшой пример, как получить размер ссылки, её адрес, и адрес который она хранит.


Код:
class A
{
public:
  A(){}
};

class B
{
public:
  B(int i) : m(i){}
  int m;
};

class C
{
public:
  C(int *p) : m(p){}
  int *m;
};

class D
{
public:
  D(int &r) : m(r){}
  int &m;
};

void main()
{
  printf("sizeof(A) = %dn", sizeof(A));
  printf("sizeof(B) = %dn", sizeof(B));
  printf("sizeof(C) = %dn", sizeof(C));
  printf("sizeof(D) = %dn", sizeof(D));
/*
имеем  (64 бит, указатель имеет размер 8 байт)
sizeof(A) = 1
sizeof(B) = 4
sizeof(C) = 8
sizeof(D) = 8

Пустой класс имеет размер 1. Остальные имеют размер равный размеру переменной-члену.
Если ссылка не имеет размера, тогда какого рожна класс D имеет размер целых 8 байт?
*/


  int i = 10;
  B b(i);
  C c(&i);
  D d(i);

  printf("i = %dn", i);
  printf("b.m = %dn", b.m);
  printf("*c.m = %dn", *c.m);
  printf("d.m = %dn", d.m);

/*
имеем
i = 10
b.m = 10
*c.m = 10
d.m = 10
*/


  i = 20;
  printf("i = %dn", i);
  printf("b.m = %dn", b.m);
  printf("*c.m = %dn", *c.m);
  printf("d.m = %dn", d.m);

/*
имеем
i = 20
b.m = 10
*c.m = 20
d.m = 20
*/


// трюк с указателем
  int **ppi = reinterpret_cast<int**>(&c);
  **ppi = 30;

  printf("i = %dn", i);
  printf("b.m = %dn", b.m);
  printf("*c.m = %dn", *c.m);
  printf("d.m = %dn", d.m);

/*
имеем
i = 30
b.m = 10
*c.m = 30
d.m = 30

Я взял адрес объекта c, который равен адресу его внутреннего указателя,
взял адрес, который храниться в указателе, и записал туда число,
фактически в переменную i.
*/


// трюк с ссылкой
  ppi = reinterpret_cast<int**>(&d);
  **ppi = 40;

  printf("i = %dn", i);
  printf("b.m = %dn", b.m);
  printf("*c.m = %dn", *c.m);
  printf("d.m = %dn", d.m);

/*
имеем
i = 40
b.m = 10
*c.m = 40
d.m = 40

Я взял адрес объекта d, который равен адресу его внутренней ссылки,
взял адрес, который храниться в ссылке, и записал туда число,
фактически в переменную i.
Если ссылка не имеет размера, не имеет адреса, и не содержит никакого адреса,
то как такое объяснить?
*/


}
326
11 февраля 2015 года
sadovoya
757 / / 19.11.2005
Тут и знатоком не надо быть, вопрос об азах языка.
Тему уже заездили до дыр. Ваш пост мне не понравился - вы делаете обобщение на понятие "ссылка", исходя из эксперимента над компилятором. Что есть ссылка с точки зрения C++ и ее реализация -- разные вещи. Если вы открыли, что в вашем компиляторе ссылки имеют определенные свойства (причем что в них от реализации, а что - языковое вы не можете разделить) и представлены как урезки указателей - так это только и всего. Если это даже во всех компиляторах так, то все-равно. Ссылка и реализация ее - разные вещи. Понятия языка вводятся директивно, а реализация должна удовлетворять этому, но имеет свободу во всем неоговоренном. Поэтому наше дело не экспериментировать в таких вещах, а учить матчасть. В любом случае, надо отдавать себе отчет в том, что в эксперименте присутствуют факторы реализации, которые надо уметь отделять.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог