crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Использование ссылок или указателей или вообще без них
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Tonal Дата 18.3.2008, 8:49
  Собственно, кардинальное различие в том, что указатель всегда имеет "свою" память и язык позволяет получить на неё указатель.
А ссылка не обязана иметь свою память, и средствами языка ты не можешь узнать имеет или нет. :)

Какие-то манипуляции со ссылкой в языке всегда эквивалентны операциям над объектом которым она инициализирована.
И в языке нет прямого способа манипулировать чем-то, что-бы было ссылкой. :)
Tonal Дата 18.3.2008, 8:45
 
Цитата(0xF @ 18.3.2008, 2:28) *
Во-вторых, как это "псевдоним"? Внутри это такой же адрес... Выходит, что ссылка - такой же указатель, который не может указывать в никуда, а только на нужную область памяти(там где переменная хранится) + немного другой синтаксис(не надо разыменовывать, чтоб сделать выборку значения, как при работе с указателями)

Ссылка может быть, а может и не быть странслирована в указатель.
Например, если ссылка находится в локальной зоне видимости, нормальный компилятор просто не будет заводить для неё отдельную ячейку памяти (см. например, приведённый тобой код). :rolleyes:
То же самое с подставляемыми (inline) функциями.
Для временных объектов ссылка может вполне не быть указателем, а именно обозначать сам объект:
struct base_t {};
struct derived_t : base_t {};

int main() {
  const base_t& obj = derived_t();
}

В этом случае, obj может трактоваться компилятором так же, как если бы было объявлено const derived_t obj.
Смысла нет заводить здесь ещё и указатель. :rolleyes:
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'у
я имел ввиду следующий код:
int n = 1;
int &rn;

неинициализированная ссылка
Admin Дата 17.3.2008, 22:03
 
Цитата(Litkevich Yuriy @ 17.3.2008, 21:12) *
ссылка - псевдоним конкретной переменной, неможет указыват в никуда, т.е. всегда инициализируется конкретным значением;
Да ладно, а как тебе такой код:
int n = 1;
int &rn = n;
if( true)
{
   int x = 100;
   rn=x;
}
// Чему равна rn?
:)
Litkevich Yuriy Дата 17.3.2008, 21:12
  если я правильнопонимаю Си, то ссылка и указатель разные вещи:
указатель - переменная содержащая адрес, может указыват в никуда;
ссылка - псевдоним конкретной переменной, неможет указыват в никуда, т.е. всегда инициализируется конкретным значением;

вроде так
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.4.2024, 12:32