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

0

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

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

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

Hello!

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

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

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

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

Теги:
cout

1 ответ

4
Лучший ответ

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

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

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

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

  • 0
    @LightnessRacesinOrbit: Это интересно и объясняет наблюдаемое поведение. Но на это определенно нельзя положиться.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню