Когда вызов функции-члена для нулевого экземпляра приводит к неопределенному поведению?

Рассмотрим следующий код:

#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 имеет значение null, программа вводит неопределенное поведение, поскольку разыменование null всегда называется неопределенным поведением.

Есть ли(a) привести к неопределенному поведению? Как насчет, если обе функции (иx) статичны?

Ответы на вопрос(2)

Ваш ответ на вопрос