Игнорируемые параметры в 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
в этом случае, который бы объяснил поведение, которое вы видите. Но это не то, на что вы можете положиться.)