Игнорируемые параметры в std::cout после NULL

Если я напишу этот код:

const char * b = NULL;
std::cout << "Hello!" << b;

Я получаю этот вывод:

Hello!

Однако, если я изменю порядок на:

const char * b = NULL;
std::cout << b << "Hello!";

Я ничего не получаю, так что мне интересно.

Я могу догадаться, что, вероятно, оператор << для cout читает до NULL, так что все после него игнорируется, но интересно, может ли кто-нибудь дать мне больше информации об этом.

1 ответ

Решение

Оператор имеет предварительное условие:

Требуется: s не должен быть нулевым указателем.

Нарушая это предварительное условие, вы вызываете неопределенное поведение. Может произойти все, что угодно.

(Как уже упоминалось в комментариях, один из популярных наборов реализации failbit а также badbit в этом случае, который бы объяснил поведение, которое вы видите. Но это не то, на что вы можете положиться.)

Другие вопросы по тегам