Стандарт и вызов по нулевому адрсу
|
От: |
_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: Стандарт и вызов по нулевому адрсу
разыменование нулевого указателя — неопределенное поведение.
Of course, the code must be complete enough to compile and link.
Re: Стандарт и вызов по нулевому адрсу
Здравствуйте, _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.
Re: Стандарт и вызов по нулевому адрсу
Здравствуйте, _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).
До последнего не верил в пирамиду Лебедева.
Пока на собственное сообщение не было ответов, его можно удалить.