Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
thick_int
Заблокирован
#1

Что такое потоковые манипуляторы - C++

28.04.2012, 18:48. Просмотров 1068. Ответов 7
Метки нет (Все метки)

Как то удивительно странно все авторы обходят стороной вопрос, что такое потоковые манипуляторы, как то endl, setw, dec и так далее.
Чем же они являются. Может быть это особые значения, вряд ли. Может быть это особые фуункци.

Так все таки, к какой сущности C++ следует относить эти манипуляторы.

Одним словом, как применять их более-менее понятно, а что же это такое - совершенно непонятно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2012, 18:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что такое потоковые манипуляторы (C++):

Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами? - C++
Что такое файловый буфер? Что такое режим (модификатор) доступа, при работе с файлами?

Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа? - C++
Что такое рекурсивный тип данных? Что такое конструкция рекурсивного типа?

Что такое хэндлер файла? Что такое файловый указатель? - C++
Что такое хэндлер файла? Что такое файловый указатель?

Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них - C++
Что такое заголовочный файл? Что такое файл исходного кода? Рассмотрите назначение каждого из них пожалуйста.

"потоковые переменные"... или что-то в этом роде... - C++
Есть ли что-нибудь типо потоковых переменных?... (нужно создать поток, в который можно писать с одной стороны и считывать с другой...

Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере - C++
Есть класс, содержащий объекты и конструктор. Конструктор объявляется в одном из cpp файлов(их несколько). Можно ли, как-то, использовать...

7
Kastaneda
Форумчанин
Эксперт С++
4676 / 2880 / 234
Регистрация: 12.12.2009
Сообщений: 7,317
Записей в блоге: 2
Завершенные тесты: 1
28.04.2012, 20:49 #2
Manipulators are functions specifically designed to be used in conjunction with the insertion (<<) and extraction (>>) operators on stream objects
http://cplusplus.com/reference/iostream/manipulators/
0
thick_int
Заблокирован
28.04.2012, 21:58  [ТС] #3
Не густо однако.
Ну что ж, будем считать пока, что, что такое потоковые манипуляторы - это тайна C++, покрытая глубоким мраком.
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
28.04.2012, 22:49 #4
по ссылке то, что доктор прописал.
по сути - это настройщики потоков.
запись stream << manipulator;
приводит к вызову функции manipulator, которой передается этот самый поток. А она, эта функция, настраивает этот поток каким-то образом или выводит в поток что-то (рефрешит поток, настраивает формат вывода определенных типов, заставляет ингорировать какие-то символы и т.п.).
0
thick_int
Заблокирован
28.04.2012, 22:53  [ТС] #5
Ну, я не могу понять в чем суть тогда вот такого оператора (он кстати вполне легален)

C++
1
cout << endl(cout);
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
28.04.2012, 22:58 #6
запись
endl(cout);
эквивалентна
cout << endl;

cout << endl(cout); - это несколько другое. это вызов endl(cout) и запись в поток результата этого вызова.
рассматривайте запись cout << endl как синтаксический сахар. ведь много чего в поток суется именно таким образом. поэтому более привычно выглядит именно так.

и еще возможно это более корректно. раз endl что-то возвращает, может оказатся так, что в функции
C++
1
2
3
4
5
6
ostream& operator << (ostream s&, manupulator m)
{
   sometype result = m(s);
   // result как-то используется. надо в исходники смотреть что там происходит
   return s;
}
0
thick_int
Заблокирован
28.04.2012, 23:05  [ТС] #7
Ну вообщем выяснили пока, что манипуляторы - это функции.
Осталось только понять, где то свойство C++, которое позволяет этим функциям применяться вот в такой форме, то есть без аргументов, как с endl, или не со всеми аргументами (для параметрических манипуляторов).
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
28.04.2012, 23:17 #8
ну в дебаге же можно посмотреть. все работает за счет правильной перегрузки оператора << для потока:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
std::cout << std::endl;
приводит к вызову
_Myt& __CLR_OR_THIS_CALL operator<<(_Myt& (__cdecl *_Pfn)(_Myt&))
{ // call basic_ostream manipulator
  _DEBUG_POINTER(_Pfn);
  return ((*_Pfn)(*this));
}
т.е. это была перегрузка оператора для указателя на функцию определенной сигнатуры.
 
вызов
std::cout << std::setw(10);
 
приводит к другой перегрузке:
template<class _Elem,
    class _Traits,
    class _Arg> inline
    basic_ostream<_Elem, _Traits>& __CLRCALL_OR_CDECL operator<<(
        basic_ostream<_Elem, _Traits>& _Ostr, const _Smanip<_Arg>& _Manip)
    {   // insert by calling function with output stream and argument
    (*_Manip._Pfun)(_Ostr, _Manip._Manarg);
    return (_Ostr);
    }
 
потому что фозвращаемый тип функции std::setw(streamsize)
какой-то такой:
_Smanip<_Arg> - а эта объект, которому при построении передали размер.
вот примерно таким макаром все и работает. за счет перегрузки функций.
1
28.04.2012, 23:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2012, 23:17
Привет! Вот еще темы с ответами:

Что такое перегрузка оператора? Что у меня в коде за ошибка? - C++
Что же я написал?? Что оно не компилится? Что значит error C2275: Superclass: недопустимое использование этого типа в качестве выражения ...

В этой части кода происходит объявление функций? Что такое void? Что в скобках? - C++
В этой части кода происходит объявление функций? Что такое void? Что в скобках? void get(float **mas, int N, int M); void...

Что такое #, include, что это означает - C++
______

Потоковые итераторы - C++
Я новичок, прошел тему &quot;STL&quot; по учебнику Лафоре. Пишу в Code::Blocks, поставить другую IDE возможности мало. При попытке работы с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru