Рассмотрим следующий код:
#include <iostream>
struct foo
{
// (a):
void bar() { std::cout << "gman was here" << std::endl; }
// (b):
void baz() { x = 5; }
int x;
};
int main()
{
foo* f = 0;
f->bar(); // (a)
f->baz(); // (b)
}
Мы ожидаем сбой (b)
, потому что для нулевого указателя нет соответствующего члена x
. На практике (a)
не сбой, потому что указатель this
никогда не используется.
Поскольку (b)
разделяет указатель this
((*this).x = 5;
) и this
равен нулю, программа вводит поведение undefined, так как разыменование нуля всегда называется undefined.
Выполняет ли (a)
поведение undefined? Как насчет того, что обе функции (и x
) являются статическими?