Рассмотрим следующий код:
#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) являются статическими?