Здравствуйте, гость ( Вход | Регистрация )
Tonal | Дата 18.3.2008, 8:49 |
Собственно, кардинальное различие в том, что указатель всегда имеет "свою" память и язык позволяет получить на неё указатель. А ссылка не обязана иметь свою память, и средствами языка ты не можешь узнать имеет или нет. Какие-то манипуляции со ссылкой в языке всегда эквивалентны операциям над объектом которым она инициализирована. И в языке нет прямого способа манипулировать чем-то, что-бы было ссылкой. |
|
Tonal | Дата 18.3.2008, 8:45 |
Во-вторых, как это "псевдоним"? Внутри это такой же адрес... Выходит, что ссылка - такой же указатель, который не может указывать в никуда, а только на нужную область памяти(там где переменная хранится) + немного другой синтаксис(не надо разыменовывать, чтоб сделать выборку значения, как при работе с указателями) Ссылка может быть, а может и не быть странслирована в указатель. Например, если ссылка находится в локальной зоне видимости, нормальный компилятор просто не будет заводить для неё отдельную ячейку памяти (см. например, приведённый тобой код). То же самое с подставляемыми (inline) функциями. Для временных объектов ссылка может вполне не быть указателем, а именно обозначать сам объект:
В этом случае, obj может трактоваться компилятором так же, как если бы было объявлено const derived_t obj. Смысла нет заводить здесь ещё и указатель. |
|
Novak | Дата 17.3.2008, 23:40 |
Имхо, может по сути ссылки и указатели близки. Но вещи всеже разные, главное отличие в предназначении. Ссылки, как было сказано выше - псевдонимы переменных. Указатели же используются несколько шире, чем просто псевдонимы. Не возьмусь судить о реализации в компиляторах, но вещи эти именно семантически, с точки зрения языка различны. |
|
Litkevich Yuriy | Дата 17.3.2008, 23:33 |
Цитата даже не соберется я его для того и привел, что ее инициализировать ее обязательно, а ссылка, может по праву считатся псевдонимом, если говорить я зыком литературным т.к. в указаном примере n будет равна 100, а rn ее псевдоним |
|
0xF | Дата 17.3.2008, 23:28 |
Цитата(Litkevich Yuriy) если я правильнопонимаю Си, то ссылка и указатель разные вещи: указатель - переменная содержащая адрес, может указыват в никуда; ссылка - псевдоним конкретной переменной, неможет указыват в никуда, т.е. всегда инициализируется конкретным значением; Во-первых, в С нету ссылок, они появились только в С++ Во-вторых, как это "псевдоним"? Внутри это такой же адрес... Выходит, что ссылка - такой же указатель, который не может указывать в никуда, а только на нужную область памяти(там где переменная хранится) + немного другой синтаксис(не надо разыменовывать, чтоб сделать выборку значения, как при работе с указателями) Ну и плюс ко всему, ссылка обязательно должна быть инициализирована, так что твой код(int n = 1; int &rn;) даже не соберется Цитата(Admin) int n = 1; int &rn = n; if( true) { int x = 100; rn=x; } // Чему равна rn? rn по-прежнему ссылается на n, а n тепер равна 100 |
|
Litkevich Yuriy | Дата 17.3.2008, 22:28 |
в твоем примере она всегда инициализирована, нет момента когда она показывает в никуда мало того n тоже равна 100, а точнее именно n, а не rn, это лишь псевдоним n |
|
Admin | Дата 17.3.2008, 22:13 |
Так не может быть, а так как я показал может быть, но вроде как инициализированная, а вроде как нет. | |
Litkevich Yuriy | Дата 17.3.2008, 22:11 |
как я понимаю x'у я имел ввиду следующий код:
неинициализированная ссылка |
|
Admin | Дата 17.3.2008, 22:03 |
ссылка - псевдоним конкретной переменной, неможет указыват в никуда, т.е. всегда инициализируется конкретным значением; Да ладно, а как тебе такой код:
|
|
Litkevich Yuriy | Дата 17.3.2008, 21:12 |
если я правильнопонимаю Си, то ссылка и указатель разные вещи: указатель - переменная содержащая адрес, может указыват в никуда; ссылка - псевдоним конкретной переменной, неможет указыват в никуда, т.е. всегда инициализируется конкретным значением; вроде так |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.4.2024, 12:32 |