Если я напишу этот код:
const char * b = NULL;
std::cout << "Hello!" << b;
Я получаю этот вывод:
Hello!
Однако, если я изменю порядок:
const char * b = NULL;
std::cout << b << "Hello!";
Я ничего не получаю, поэтому мне это интересно.
Я могу догадаться, что, вероятно, оператор << cout читает до NULL, поэтому все после него игнорируется, но задайтесь вопросом, может ли кто-нибудь дать мне более глубокое представление об этом.
У оператора есть предварительное условие:
Требуется:
s
не должно быть нулевым указателем.
Разрушая это предварительное условие, вы вызываете неопределенное поведение. Может произойти все, что угодно.
(Как упоминалось в комментариях, одна популярная реализация задает в этом случае failbit
и badbit
, что объясняет поведение, которое вы видите, но это не то, на что вы можете положиться.)