Стандарт, по-видимому, требует std::cout
, чтобы иметь тип std::ostream
. Исторически сложилось так, что в классическом (предварительно стандартном) объекте iostream должно было быть ostream
или типа, полученного от ostream
. (Это было неуказано, поэтому для реализации не пришлось документировать его.) Я подозреваю, что это стандартная ошибка в стандарте , но это способ, которым он стоит.
Никогда не было «стандартного» класса ostream_withassign
, на который вы могли рассчитывать. В классических iostreams, до стандарта , по крайней мере одна реализация имела такой класс, , который он использовал для cout
(тогда std::
), для того чтобы управлял инициализацией, хотя я не уверен в деталях. Как , насколько я знаю, даже тогда это была деталь реализации, а не указана даже при реализации. Это не было широко распространенным; ни одна из реализаций, которые я использовал, тогда имела это, , и она не существует ни в какой реализации, о которой я знаю сегодня.
Таким образом, книга чрезвычайно устарела. И если книга утверждает, что она о C++, это неправильно, даже тогда. И если он утверждает, что является о конкретной реализации C++, это зависит от того, является ли это описанием внутренних деталей, это правильно, но если он утверждает, что будет описывать интерфейс, это неправильно.
Пожалуйста, посмотрите изображение, которое я загрузил. (Книга специфична для C++) –
@gandhi_rahul Это _might_ будет таким, каким была реализована конкретная реализация iostream 15 лет назад. Сегодня это не актуально, и даже тогда это было очень специфично для реализации. –
Хорошо. Это означает, что шаблон реализации изменился. Правильно!? –