Пространства имён
Варианты
Действия

std::operator<<,>>

Материал из cppreference.com
< cpp‎ | string‎ | basic string
 
 
 
std::basic_string
Функции-члены
basic_string::basic_string
basic_string::operator=
basic_string::assign
basic_string::get_allocator
Доступ к элементам
basic_string::at
basic_string::operator[]
basic_string::front(C++11)
basic_string::back(C++11)
basic_string::data
basic_string::c_str
Итераторы
basic_string::begin
basic_string::cbegin

(C++11)
basic_string::end
basic_string::cend

(C++11)
basic_string::rbegin
basic_string::crbegin

(C++11)
basic_string::rend
basic_string::crend

(C++11)
Вместимость
basic_string::empty
basic_string::size
basic_string::length
basic_string::max_size
basic_string::reserve
basic_string::capacity
basic_string::shrink_to_fit(C++11)
Операции
basic_string::clear
basic_string::insert
basic_string::erase
basic_string::push_back
basic_string::pop_back(C++11)
basic_string::append
basic_string::operator+=
basic_string::compare
basic_string::replace
basic_string::substr
basic_string::copy
basic_string::resize
basic_string::swap
Поиск
basic_string::find
basic_string::rfind
basic_string::find_first_of
basic_string::find_first_not_of
basic_string::find_last_of
basic_string::find_last_not_of
Константы
basic_string::npos
Функции, не являющиеся членами
operator+
operator==
operator!=
operator<
operator>
operator<=
operator>=
swap(std::basic_string)
operator<<
operator>>
getline
stoi
stol
stoll
(C++11)
(C++11)
(C++11)
stoul
stoull
(C++11)
(C++11)
stof
stod
stold
(C++11)
(C++11)
(C++11)
to_string(C++11)
to_wstring(C++11)
Вспомогательные классы
hash<std::string>
hash<std::wstring>
hash<std::u32string>
hash<std::u16string>
(C++11)
 
Определено в заголовочном файле <string>
template <class CharT, class Traits, class Allocator>

std::basic_ostream<CharT, Traits>&
    operator<<(std::basic_ostream<CharT, Traits>& os,

               const std::basic_string<CharT, Traits, Allocator>& str);
(1)
template <class CharT, class Traits, class Allocator>

std::basic_istream<CharT, Traits>&
    operator>>(std::basic_istream<CharT, Traits>& is,

               std::basic_string<CharT, Traits, Allocator>& str);
(2)

1) В первую очередь создается объект-часовой std::basic_ostream::sentry, который сбросит (flush) связанный с помощью tie поток, если это необходимо, и выполнит проверку на наличие ошибок. Если объект-часовой вернет false, выполнение завершится сразу же.

Если же объект-часовой вернул true, определяется формат заполнения вывода таким же образом, как на этапе 3 функции num_put::put().

Далее каждый символ полученной последовательности (содержимое str плюс заполнение) сохраняется в выходной поток os, как при вызове os.rdbuf()->sputn(seq, n), где n=std::max(os.width(), str.size())

В завершении происходит вызов os.width(0).

2) В первую очередь создается объект-часовой std::basic_istream::sentry, который сбросит (flush) связанный с помощью tie поток, если это необходимо, извлечет и отбросит все ведущие пробельные символы (если не был снят флаг ios_base::skipws), и выполнит проверку на наличие ошибок. Если объект-часовой вернет false, выполнение завершится сразу же.

Если же объект-часовой вернул true, str очищается с помощью str.erase()

Далее считываются символы из is и добавляются к str, как при вызове str.append(1, c), до тех пор, пока не выполнится одно из следующих условий:

  • закончено считывание N символов, где N равно is.width(), если is.width() > 0, в противном случае N равно str.max_size()
  • достигнуто состояние конца файла (EOF) в потоке is
  • std::isspace(c,is.getloc()) возвращает true для следующего символа c в is (этот пробельный символ остается во входном потоке)

Если ни один символ не был извлечен, std::ios::failbit будет установлен для is, что может сгенерировать исключение std::ios_base::failure.

В завершении происходит вызов os.width(0) и уничтожение объекта-часового std::basic_istream::sentry.

Содержание

[править] Исключения

1) может сгенерировать std::ios_base::failure, если во время вывода было сгенерировано исключение.

2) может сгенерировать std::ios_base::failure, если ни один символ не был извлечен из is (например, поток находится в конце файла или состоит только из пробелов), или если во время ввода было сгенерировано исключение.

[править] Параметры

os - поток вывода символов
is - поток ввода символов
str - строка, которая будет вставлена ​​или извлечена

[править] Возвращаемое значение

1) os 2) is

[править] Пример

#include <iostream>
#include <string>
 
int main()
{
    std::string greeting = "Hello, whirled!"
    std::cout << greeting << '\n';
}

Вывод:

Hello, whirled!