Здравствуйте, LuciferMoscow, Вы писали:
LM>А поискать?
LM>1. Ссылка НЕ может NULL. Указатель может. LM>2. Ссылка инициализируется только один раз, указатель можно менять.
LM>Вроде ничего не забыл?
Еще над указателем можно производить арифметику (+int, -int) в предположении, что он указаывает на элемент массива. С ссылкой нет.
С ссылкой вообще ничего нельзя сделать — любая операция над ней производится над объектом, на который она указывает. Из-за этого еще глючит сишный макрос va_start, если переданный ему аргумент процедуры — ссылка. А указатель — полноправный тип данных.
>1. Ссылка НЕ может NULL. Указатель может.
Это ещё почему? Вообще говоря, может без проблем... в смысле, адрес объекта, на который она ссылается может быть равен NULL.
Здравствуйте, Вумудщзук, Вы писали:
>>1. Ссылка НЕ может NULL. Указатель может. В>Это ещё почему? Вообще говоря, может без проблем... в смысле, адрес объекта, на который она ссылается может быть равен NULL.
>>Это ещё почему? Вообще говоря, может без проблем... в смысле, адрес объекта, на который она ссылается может быть равен 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);
}
Здравствуйте, Вумудщзук, Вы писали:
>>>Это ещё почему? Вообще говоря, может без проблем... в смысле, адрес объекта, на который она ссылается может быть равен NULL. >>В С++ объектов с адресом NULL не существует
В>
jazzer wrote: > > С>Только за это обычно руки отрывают > > это — разыменование нулевого указателя, т.е. неопределенное поведение. > > На факт того, что объектов с адресом NULL в С++ не существует, этот > пример неопределенного поведения никакого влияния не оказывает.
Зато он опрокидывает утверждение-гарантию, что референсов
на NULL не бывает. Бывают, хотя и не гарантированно.
>Это называется (по стандарту)неопределенное поведение.
Как это называется — неопределённое поведение, недокументировання особенность — это совершенно неважно, важен сам факт: адрес объекта, на который указывает ссылка — NULL.
> Могло просто грохнутся
Ясное дело, что грохнется, если обратиться к такому объекту. Об этом и речь — ссылка не гарантирует валидности объекта.
Здравствуйте, Вумудщзук, Вы писали:
>>Это называется (по стандарту)неопределенное поведение. В>Как это называется — неопределённое поведение, недокументировання особенность — это совершенно неважно, важен сам факт: адрес объекта, на который указывает ссылка — NULL.
подними мне веки, плиз, — где там объект по адресу 0? Не вижу никакого объекта. Вижу только нулевой указатель.
>> Могло просто грохнутся В>Ясное дело, что грохнется, если обратиться к такому объекту. Об этом и речь — ссылка не гарантирует валидности объекта.
Скажу больше. Стандарт не гарантирует корректность работы программы, содержащей неопределенное поведение. Вообще, всей программы, понимаешь? Даже i++ не гарантируется, если ты где-то разыменовываешь нулевой указатель.
И все это не оказывает никакого влияния на факт того, что объектов с адресом NULL в С++ не существует.
jazzer wrote: > > K>Зато он опрокидывает утверждение-гарантию, что референсов > K>на NULL не бывает. Бывают, хотя и не гарантированно. > > В программе, содержащей только определенное поведение, таких ссылок не > бывает. А объектов не бывает никогда, по определению.
The important thing about this plan is to remember
that nothing can go wrong. (c) Вузи, GTA:SA.
Здравствуйте, 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.
Именно так.
Стандарт специфицирует только поведение программы, не содержащей неопределенного поведения.
Если неопределенное поведение есть — программа может вести себя как угодно.
Как известно, обычно она просто форматирует винчестер.