×
Traktatov.net » Язык программирования C++. Пятое издание » Читать онлайн
Страница 9 из 714 Настройки

. Таким образом, результатом является объект класса >ostream, в который записано предоставленное значение.

Выражение вывода использует оператор ><< дважды. Поскольку оператор возвращает свой левый операнд, результат первого оператора становится левым операндом второго. В результате мы можем сцепить вместе запросы на вывод. Таким образом, наше выражение эквивалентно следующему:

>(std::cout << "Enter two numbers:") << std::endl;

У каждого оператора в цепи левый операнд будет тем же объектом, в данном случае >std::cout. Альтернативно мы могли бы получить тот же вывод, используя два оператора:

>std::cout << "Enter two numbers:";

>std::cout << std::endl;

Первый оператор выводит сообщение для пользователя. Это сообщение, строковый литерал (string literal), является последовательностью символов, заключенных в парные кавычки. Текст в кавычках выводится на стандартное устройство вывода.

Второй оператор выводит >endl — специальное значение, называемое манипулятором (manipulator). При его записи в поток вывода происходит переход на новую строку и сброс буфера (buffer), связанного с данным устройством. Сброс буфера гарантирует, что весь вывод, который программа сформировала на данный момент, будет немедленно записан в поток вывода, а не будет ожидать записи, находясь в памяти.

Во время отладки программисты зачастую добавляют операторы вывода промежуточных значений. Для таких операторов всегда следует применять сброс потока. Если этого не сделать, оставшиеся в буфере вывода данные в случае сбоя программы могут ввести в заблуждение разработчика, неправильно засвидетельствовав место возникновения проблемы.

Использование имен из стандартной библиотеки

Внимательный читатель, вероятно, обратил внимание на то, что в этой программе использована форма записи >std::cout и >std::endl, а не просто >cout и >endl. Префикс >std:: означает, что имена >cout и >endl определены в пространстве имен (namespace) по имени >std. Пространства имен позволяют избежать вероятных конфликтов, причиной которых является совпадение имен, определенных в разных библиотеках. Все имена, определенные в стандартной библиотеке, находятся в пространстве имен >std.

Побочным эффектом применения пространств имен библиотек является то, что названия используемых пространств приходится указывать явно, например >std. В записи >std::cout применяется оператор области видимости>:: (scope operator), позволяющий указать, что здесь используется имя >cout, которое определено в пространстве имен >std. Как будет продемонстрировано в разделе 3.1, существует способ, позволяющий программисту избежать частого использования подробного синтаксиса.

Чтение из потока

Отобразив приглашение к вводу, необходимо организовать чтение введенных пользователем данных. Сначала следует определить две переменные (variable), в данном случае >v1 и >v2, которые и будут содержать введенные данные:

>int v1 = 0, v2 = 0;

Эти переменные определены как относящиеся к типу >int, который является встроенным типом данных для целочисленных значений. Мы также инициализируем (initialize) их значением 0. При инициализации переменной ей присваивается указанное значение в момент создания.