Почему это, если с инициализатором не верно? - PullRequest
0 голосов
/ 13 февраля 2020
int* get(){return nullptr;}

int main()
{
   if(auto p = get(); (*p) != 1231231233)
   {
        std::cout << "NO";   // not printed
   }
   else
   {
        std::cout << "we should be here" << std::endl;;   
   }
}

Почему здесь не напечатано NO, потому что согласно стандарту , init-Statement не проверяется на true и доступ к *p должен быть UB, и мы должны привести к true? Я озадачен: LIVE

1 Ответ

2 голосов
/ 13 февраля 2020

Вы разыменовываете nullptr внутри предложения if, что является неопределенным поведением. Компилятору в основном разрешено делать с этим фрагментом кода все, что он хочет. Вы не можете делать какие-либо предположения о том, что произойдет при выполнении (*p).

...