2013-11-15 2 views
0

enter image description here До сих пор я считаю, что cout является объектом класса ostream. Но сегодня я читаю в книге, что cout является объектом класса osream_withassign. Где находится этот класс.Cout является объектом класса ostream_withassign

Я новичок в концепции ввода/вывода на C++. Так что, если кто-нибудь может объяснить мне иерархию классов в библиотеке iostream? Я googled, но не нахожу никакого точного ответа.

EDIT: Я прикрепляю изображение, которое я нашел позже в той же книге.

ответ

0

О реальной иерархии вы можете прочитать стандарт языка C++, или посмотреть here

std::cout является объектом типа std::ostream, который ЬурейеЕ на std::basic_ostream<char>.

4

Стандарт, по-видимому, требует std::cout, чтобы иметь тип std::ostream. Исторически сложилось так, что в классическом (предварительно стандартном) объекте iostream должно было быть ostreamили типа, полученного от ostream. (Это было неуказано, поэтому для реализации не пришлось документировать его.) Я подозреваю, что это стандартная ошибка в стандарте , но это способ, которым он стоит.

Никогда не было «стандартного» класса ostream_withassign , на который вы могли рассчитывать. В классических iostreams, до стандарта , по крайней мере одна реализация имела такой класс, , который он использовал для cout (тогда std::), для того чтобы управлял инициализацией, хотя я не уверен в деталях. Как , насколько я знаю, даже тогда это была деталь реализации, а не указана даже при реализации. Это не было широко распространенным; ни одна из реализаций, которые я использовал, тогда имела это, , и она не существует ни в какой реализации, о которой я знаю сегодня.

Таким образом, книга чрезвычайно устарела. И если книга утверждает, что она о C++, это неправильно, даже тогда. И если он утверждает, что является о конкретной реализации C++, это зависит от того, является ли это описанием внутренних деталей, это правильно, но если он утверждает, что будет описывать интерфейс, это неправильно.

+0

Пожалуйста, посмотрите изображение, которое я загрузил. (Книга специфична для C++) –

+0

@gandhi_rahul Это _might_ будет таким, каким была реализована конкретная реализация iostream 15 лет назад. Сегодня это не актуально, и даже тогда это было очень специфично для реализации. –

+0

Хорошо. Это означает, что шаблон реализации изменился. Правильно!? –

Смежные вопросы