Код вызывает неопределенное поведение (поскольку он разыменовывает B *
, который не указывает на объект B
), что означает, что может произойти все, что угодно. Вы не должны ожидать каких-либо конкретных последствий.
Чтобы узнать, что сделал ваш компилятор, вы можете проверить сборку. Я предполагаю, что компилятор сгенерировал сборку, которая была бы правильной, если бы там был объект B
: вызовите функцию B::q()
с неявным аргументом p
.