Стандарт и вызов по нулевому адрсу
От: _FRED_ Черногория
Дата: 29.09.09 06:52
Оценка:
Имеется следующий код:

#include <iostream>

class A 
{
public:
    void foo() { std::cout << "hi"; };
};

int _tmain(int argc, _TCHAR* argv[])
{
    A *a = NULL;
    (*a).foo();
    return 0;
}


(здесь
Автор: samius
Дата: 29.09.09
)

На сколько данный код с точки зрения стандарта правомерен? В Q&A я отыскал ссылки на этот вот топик
Автор: Андрей Тарасевич
Дата: 28.04.02
, но там говорит о стрелке, а не о точке.
Help will always be given at Hogwarts to those who ask for it.
Re: Стандарт и вызов по нулевому адрсу
От: Lorenzo_LAMAS  
Дата: 29.09.09 06:53
Оценка: 20 (1)
разыменование нулевого указателя — неопределенное поведение.
Of course, the code must be complete enough to compile and link.
Re: Стандарт и вызов по нулевому адрсу
От: Bell Россия  
Дата: 29.09.09 07:03
Оценка: 20 (1)
Здравствуйте, _FRED_, Вы писали:

_FR>Имеется следующий код:


_FR>
_FR>#include <iostream>

_FR>class A 
_FR>{
_FR>public:
_FR>    void foo() { std::cout << "hi"; };
_FR>};

_FR>int _tmain(int argc, _TCHAR* argv[])
_FR>{
_FR>    A *a = NULL;
_FR>    (*a).foo();
_FR>    return 0;
_FR>}
_FR>


_FR>(здесь
Автор: samius
Дата: 29.09.09
)


_FR>На сколько данный код с точки зрения стандарта правомерен? В Q&A я отыскал ссылки на этот вот топик
Автор: Андрей Тарасевич
Дата: 28.04.02
, но там говорит о стрелке, а не о точке.


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

5.2.5/3
If E1 has the type “pointer to class X,” then the expression E1->E2 is converted to the equivalent form (*(E1)).E2
...

Любите книгу — источник знаний (с) М.Горький
Re: Стандарт и вызов по нулевому адрсу
От: jazzer Россия Skype: enerjazzer
Дата: 29.09.09 07:33
Оценка: 20 (1)
Здравствуйте, _FRED_, Вы писали:

_FR>
_FR>    A *a = NULL;
_FR>    (*a).foo();
_FR>


_FR>На сколько данный код с точки зрения стандарта правомерен? В Q&A я отыскал ссылки на этот вот топик
Автор: Андрей Тарасевич
Дата: 28.04.02
, но там говорит о стрелке, а не о точке.


стрелка и точка тут ни при чем.
Само разыменование — уже UB.
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: Стандарт и вызов по нулевому адрсу
От: Roman Odaisky Украина  
Дата: 29.09.09 19:02
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>На сколько данный код с точки зрения стандарта правомерен? В Q&A я отыскал ссылки на этот вот топик
Автор: Андрей Тарасевич
Дата: 28.04.02
, но там говорит о стрелке, а не о точке.


Во-первых, стрелка и есть точка, примененная к результату разыменования. Просто синтаксический сахар.

Во-вторых, проблема реальна: http://www.rsdn.ru/forum/cpp/2287174.1.aspx
Автор: Roman Odaisky
Дата: 01.01.07
, машинный код может не учитывать возможность NULL (на что имеет полное право): http://www.rsdn.ru/forum/cpp/2287573.1.aspx
Автор: Roman Odaisky
Дата: 02.01.07
(кстати, с тех пор GCC научился оптимизировать приведение: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35766).
До последнего не верил в пирамиду Лебедева.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.