operator<< (std::basic_ostream)
|
Определено в заголовке
<ostream>
|
||
|
basic_ostream и символы
|
||
| (1) | ||
|
template
<
class
CharT,
class
Traits
>
basic_ostream
<
CharT, Traits
>
&
|
||
|
template
<
class
CharT,
class
Traits
>
basic_ostream
<
CharT, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
basic_ostream и массив символов
|
||
| (2) | ||
|
template
<
class
CharT,
class
Traits
>
basic_ostream
<
CharT, Traits
>
&
|
||
|
template
<
class
CharT,
class
Traits
>
basic_ostream
<
CharT, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
basic_ostream rvalue
|
||
|
template
<
class
Ostream,
class
T
>
Ostream && operator << ( Ostream && os, const T & value ) ; |
(3) | (начиная с C++11) |
|
удалённые перегрузки для basic_ostream и UTF символов/массивов
|
||
| (4) | (начиная с C++20) | |
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
char
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
|
template
<
class
Traits
>
basic_ostream
<
wchar_t
, Traits
>
&
|
||
Вставляет символ или строку символов.
- Если os. width ( ) > 1 , то os. width ( ) - 1 копий os. fill ( ) добавляются к выходному символу для формирования последовательности выходных символов.
- Если ( out. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left , символы заполнения размещаются после выходного символа, в противном случае — перед ним.
-
Для первой и третьей перегрузок (где
CharTсоответствует типу ch ), вставляется ровно traits :: length ( s ) символов. - Для второй перегрузки вставляется ровно std:: char_traits < char > :: length ( s ) символов.
- Для последних двух перегрузок вставляется ровно traits :: length ( reinterpret_cast < const char * > ( s ) ) символов.
- Если количество символов для вставки меньше os. width ( ) , то в последовательность символов добавляется достаточное количество копий os. fill ( ) , чтобы её длина стала равна os. width ( ) .
- Если ( out. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left , символы заполнения добавляются в конец выходной последовательности, в противном случае они добавляются перед выходной последовательностью.
Ostream
является типом класса, публично и однозначно унаследованным от
std::ios_base
.
Содержание |
Параметры
| os | - | выходной поток для вставки данных |
| ch | - | ссылка на символ для вставки |
| s | - | указатель на строку символов для вставки |
Возвращаемое значение
Примечания
До LWG issue 1203 код вида ( std:: ostringstream ( ) << 1.2 ) . str ( ) не компилировался.
Пример
#include <fstream> #include <iostream> void foo() { // ошибка: operator<< (basic_ostream<char, _Traits>&, char8_t) удален // std::cout << u8'z' << '\n'; } std::ostream& operator<<(std::ostream& os, char8_t const& ch) { return os << static_cast<char>(ch); } int main() { std::cout << "Hello, world" // использует перегрузку для `const char*` << '\n'; // использует перегрузку для `char` std::ofstream{"test.txt"} << 1.2; // использует перегрузку для rvalue std::cout << u8'!' << '\n'; // использует программируемый operator<<(os, char8_t const&) }
Вывод:
Hello, world !
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 167 | C++98 |
количество вставленных символов для всех
перегрузок в (2) было traits :: length ( s ) |
обновлены числа для перегрузок,
где
CharT
не соответствует типу
ch
|
| LWG 1203 | C++11 |
перегрузка для rvalue потока возвращала
lvalue ссылку на базовый класс |
возвращает rvalue ссылку
на производный класс |
| LWG 2011 | C++98 | заполнение определялось std::num_put::do_put() | определяется самим оператором |
| LWG 2534 | C++11 | перегрузка для rvalue потока не была ограничена | ограничена |
Смотрите также
|
вставляет форматированные данные
(public member function) |
|
|
(C++23)
|
выводит
форматированное
представление аргументов
(function template) |
|
расширяет символы
(public member function of
std::basic_ios<CharT,Traits>
)
|