В оличие указателя от референса?
От: Аноним  
Дата: 09.08.05 09:08
Оценка:
Re: В оличие указателя от референса?
От: Lorenzo_LAMAS  
Дата: 09.08.05 09:13
Оценка:
Оригинальное название, однако
Of course, the code must be complete enough to compile and link.
Re: В оличие указателя от референса?
От: LuciferMoscow Россия  
Дата: 09.08.05 09:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А поискать?

1. Ссылка НЕ может NULL. Указатель может.
2. Ссылка инициализируется только один раз, указатель можно менять.

Вроде ничего не забыл?
Re: В оличие указателя от референса?
От: MaximE Великобритания  
Дата: 09.08.05 11:22
Оценка: 1 (1) +2 :))
А что написано в твоей книжке по С++ и что тебе там непонятно?

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Re[2]: В оличие указателя от референса?
От: Кодёнок  
Дата: 09.08.05 11:40
Оценка:
Здравствуйте, LuciferMoscow, Вы писали:

LM>А поискать?


LM>1. Ссылка НЕ может NULL. Указатель может.

LM>2. Ссылка инициализируется только один раз, указатель можно менять.

LM>Вроде ничего не забыл?


Еще над указателем можно производить арифметику (+int, -int) в предположении, что он указаывает на элемент массива. С ссылкой нет.

С ссылкой вообще ничего нельзя сделать — любая операция над ней производится над объектом, на который она указывает. Из-за этого еще глючит сишный макрос va_start, если переданный ему аргумент процедуры — ссылка. А указатель — полноправный тип данных.
Re[2]: В оличие указателя от референса?
От: Вумудщзук Беларусь  
Дата: 09.08.05 13:34
Оценка:
>1. Ссылка НЕ может NULL. Указатель может.
Это ещё почему? Вообще говоря, может без проблем... в смысле, адрес объекта, на который она ссылается может быть равен NULL.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: В оличие указателя от референса?
От: jazzer Россия Skype: enerjazzer
Дата: 09.08.05 13:45
Оценка:
Здравствуйте, Вумудщзук, Вы писали:

>>1. Ссылка НЕ может NULL. Указатель может.

В>Это ещё почему? Вообще говоря, может без проблем... в смысле, адрес объекта, на который она ссылается может быть равен NULL.

В С++ объектов с адресом NULL не существует
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: В оличие указателя от референса?
От: kittown  
Дата: 09.08.05 13:52
Оценка:
LuciferMoscow wrote:
>
> А поискать?
>
> 1. Ссылка НЕ может NULL. Указатель может.

#include <string>
#include <iostream>

class Abc
{
public:
Abc(std::string& str) : m_str(str) {};
~Abc() {std::cout << "Addr is \"" << &m_str << "\"" << std::endl;};
private:
std::string& m_str;
};

int main (int argc, char** argv)
{
std::string *str_ptr = NULL;
Abc smth(*str_ptr);
std::cout << "Hehehhh " << std::endl;
return 0;
}
Posted via RSDN NNTP Server 1.9
Re[4]: В оличие указателя от референса?
От: Вумудщзук Беларусь  
Дата: 09.08.05 13:52
Оценка:
>>Это ещё почему? Вообще говоря, может без проблем... в смысле, адрес объекта, на который она ссылается может быть равен NULL.
>В С++ объектов с адресом NULL не существует

void f(int& n)
{
    char s[1024];
    sprintf(s, "Address of n is 0x%X", &n);
    MessageBox(0, s, "", MB_OK);
}

int _tmain(int argc, _TCHAR* argv[])
{
    f(*(int *)0);
}


выводит на экран "Address of n is 0x0"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: В оличие указателя от референса?
От: Слоноежик  
Дата: 09.08.05 13:54
Оценка:
Здравствуйте, jazzer, Вы писали:

J>В С++ объектов с адресом NULL не существует


А это тогда что
int &ref = *(int*)NULL;


Только за это обычно руки отрывают
для забивания гвоздя надо выбирать правильный микроскоп.
Re[5]: В оличие указателя от референса?
От: LuciferMoscow Россия  
Дата: 09.08.05 13:54
Оценка: +1
Здравствуйте, Вумудщзук, Вы писали:

>>>Это ещё почему? Вообще говоря, может без проблем... в смысле, адрес объекта, на который она ссылается может быть равен NULL.

>>В С++ объектов с адресом NULL не существует

В>
В>void f(int& n)
В>{
В>    char s[1024];
В>    sprintf(s, "Address of n is 0x%X", &n);
В>    MessageBox(0, s, "", MB_OK);
В>}

В>int _tmain(int argc, _TCHAR* argv[])
В>{
В>    f(*(int *)0);
В>}
В>


В>выводит на экран "Address of n is 0x0"

Это называется (по стандарту)неопределенное поведение. Могло просто грохнутся
Re[5]: В оличие указателя от референса?
От: qube  
Дата: 09.08.05 13:55
Оценка:
Здравствуйте, Слоноежик, Вы писали:

С>Здравствуйте, jazzer, Вы писали:


J>>В С++ объектов с адресом NULL не существует


С>А это тогда что

С>
С>int &ref = *(int*)NULL;
С>

Частный случай Undefined behaviour.
Re[5]: В оличие указателя от референса?
От: jazzer Россия Skype: enerjazzer
Дата: 09.08.05 13:58
Оценка:
Здравствуйте, Слоноежик, Вы писали:

С>Здравствуйте, jazzer, Вы писали:


J>>В С++ объектов с адресом NULL не существует


С>А это тогда что

С>
С>int &ref = *(int*)NULL;
С>


С>Только за это обычно руки отрывают


это — разыменование нулевого указателя, т.е. неопределенное поведение.

На факт того, что объектов с адресом NULL в С++ не существует, этот пример неопределенного поведения никакого влияния не оказывает.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[6]: В оличие указателя от референса?
От: kittown  
Дата: 09.08.05 14:01
Оценка:
jazzer wrote:
>
> С>Только за это обычно руки отрывают
>
> это — разыменование нулевого указателя, т.е. неопределенное поведение.
>
> На факт того, что объектов с адресом NULL в С++ не существует, этот
> пример неопределенного поведения никакого влияния не оказывает.

Зато он опрокидывает утверждение-гарантию, что референсов
на NULL не бывает. Бывают, хотя и не гарантированно.

Mikhail
Posted via RSDN NNTP Server 1.9
Re[6]: В оличие указателя от референса?
От: Вумудщзук Беларусь  
Дата: 09.08.05 14:01
Оценка:
>Это называется (по стандарту)неопределенное поведение.
Как это называется — неопределённое поведение, недокументировання особенность — это совершенно неважно, важен сам факт: адрес объекта, на который указывает ссылка — NULL.

> Могло просто грохнутся

Ясное дело, что грохнется, если обратиться к такому объекту. Об этом и речь — ссылка не гарантирует валидности объекта.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: В оличие указателя от референса?
От: kittown  
Дата: 09.08.05 14:03
Оценка:
Вумудщзук wrote:
>
> Ясное дело, что грохнется, если обратиться к такому объекту. Об этом и
> речь — ссылка не гарантирует валидности объекта.

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

Mikhail
Posted via RSDN NNTP Server 1.9
Re[7]: В оличие указателя от референса?
От: jazzer Россия Skype: enerjazzer
Дата: 09.08.05 14:07
Оценка:
Здравствуйте, Вумудщзук, Вы писали:

>>Это называется (по стандарту)неопределенное поведение.

В>Как это называется — неопределённое поведение, недокументировання особенность — это совершенно неважно, важен сам факт: адрес объекта, на который указывает ссылка — NULL.

подними мне веки, плиз, — где там объект по адресу 0? Не вижу никакого объекта. Вижу только нулевой указатель.

>> Могло просто грохнутся

В>Ясное дело, что грохнется, если обратиться к такому объекту. Об этом и речь — ссылка не гарантирует валидности объекта.

Скажу больше. Стандарт не гарантирует корректность работы программы, содержащей неопределенное поведение. Вообще, всей программы, понимаешь? Даже i++ не гарантируется, если ты где-то разыменовываешь нулевой указатель.

И все это не оказывает никакого влияния на факт того, что объектов с адресом NULL в С++ не существует.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[7]: В оличие указателя от референса?
От: jazzer Россия Skype: enerjazzer
Дата: 09.08.05 14:09
Оценка:
Здравствуйте, kittown, Вы писали:

K>Зато он опрокидывает утверждение-гарантию, что референсов

K>на NULL не бывает. Бывают, хотя и не гарантированно.

В программе, содержащей только определенное поведение, таких ссылок не бывает.
А объектов не бывает никогда, по определению.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[8]: В оличие указателя от референса?
От: kittown  
Дата: 09.08.05 14:12
Оценка:
jazzer wrote:
>
> K>Зато он опрокидывает утверждение-гарантию, что референсов
> K>на NULL не бывает. Бывают, хотя и не гарантированно.
>
> В программе, содержащей только определенное поведение, таких ссылок не
> бывает. А объектов не бывает никогда, по определению.

The important thing about this plan is to remember
that nothing can go wrong. (c) Вузи, GTA:SA.

Mikhail
Posted via RSDN NNTP Server 1.9
Re[9]: В оличие указателя от референса?
От: jazzer Россия Skype: enerjazzer
Дата: 09.08.05 14:20
Оценка: +1 :))
Здравствуйте, kittown, Вы писали:

K>jazzer wrote:

>>
>> K>Зато он опрокидывает утверждение-гарантию, что референсов
>> K>на NULL не бывает. Бывают, хотя и не гарантированно.
>>
>> В программе, содержащей только определенное поведение, таких ссылок не
>> бывает. А объектов не бывает никогда, по определению.

K>The important thing about this plan is to remember

K>that nothing can go wrong. (c) Вузи, GTA:SA.

Именно так.

Стандарт специфицирует только поведение программы, не содержащей неопределенного поведения.
Если неопределенное поведение есть — программа может вести себя как угодно.
Как известно, обычно она просто форматирует винчестер.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.