1) Стандарт C ++ содержит много «mays», которые обычно не используются. Это одна из них. Оператор << function <strong>может использовать динамическую память, но это не обязательно. Часто это не так.
То, что ваш пример работает, не означает, что он правильный. Это просто означает, что он работает с реализацией, которую вы используете. На других реализациях он может сломаться.
«Маи», определенные стандартом, могут также идти в другом направлении. Например, любой заголовок STL может включать в себя любой другой стандартный заголовок, но это не требуется. Это часто имеет место с заголовком iostream и заголовками istream и ostream. Практически любая реализация включает в себя ostream и istream при использовании iostream, но технически это не обязательно. Это означает, что когда вы используете ostream и просто включаете iostream, ваша программа может работать, но на самом деле это не правильно в отношении стандарта.
Для c и c ++ довольно важно знать, что может молча сломаться, но это часто не очень легко.