std::basic_ostream<CharT,Traits>:: operator<<
|
basic_ostream
&
operator
<<
(
bool
value
)
;
|
(1) | |
|
basic_ostream
&
operator
<<
(
long
value
)
;
|
(2) | |
|
basic_ostream
&
operator
<<
(
unsigned
long
value
)
;
|
(3) | |
|
basic_ostream
&
operator
<<
(
long
long
value
)
;
|
(4) | (начиная с C++11) |
|
basic_ostream
&
operator
<<
(
unsigned
long
long
value
)
;
|
(5) | (начиная с C++11) |
|
basic_ostream
&
operator
<<
(
double
value
)
;
|
(6) | |
|
basic_ostream
&
operator
<<
(
long
double
value
)
;
|
(7) | |
|
basic_ostream
&
operator
<<
(
const
void
*
value
)
;
|
(8) | |
|
basic_ostream
&
operator
<<
(
const
volatile
void
*
value
)
;
|
(9) | (начиная с C++23) |
|
basic_ostream
&
operator
<<
(
std::
nullptr_t
)
;
|
(10) | (начиная с C++17) |
|
basic_ostream
&
operator
<<
(
short
value
)
;
|
(11) | |
|
basic_ostream
&
operator
<<
(
int
value
)
;
|
(12) | |
|
basic_ostream
&
operator
<<
(
unsigned
short
value
)
;
|
(13) | |
|
basic_ostream
&
operator
<<
(
unsigned
int
value
)
;
|
(14) | |
|
basic_ostream
&
operator
<<
(
float
value
)
;
|
(15) | |
|
basic_ostream
&
operator
<<
(
/* extended-floating-point-type */
value
)
;
|
(16) | (начиная с C++23) |
|
basic_ostream
&
operator
<<
(
std::
basic_streambuf
<
CharT, Traits
>
*
sb
)
;
|
(17) | |
|
basic_ostream
&
operator
<<
(
std:: ios_base & ( * func ) ( std:: ios_base & ) ) ; |
(18) | |
|
basic_ostream
&
operator
<<
(
std:: basic_ios < CharT, Traits > & ( * func ) ( std:: basic_ios < CharT, Traits > & ) ) ; |
(19) | |
|
basic_ostream
&
operator
<<
(
std::
basic_ostream
<
CharT, Traits
>
&
(
*
func
)
|
(20) | |
Вставляет данные в поток.
badbit
.
- static_cast < long > ( static_cast < unsigned short > ( value ) ) , если flags ( ) & std:: ios_base :: basefield равно std::ios_base::oct или std::ios_base::hex , или
- static_cast < long > ( value ) в противном случае.
- static_cast < long > ( static_cast < unsigned int > ( value ) ) , если flags ( ) & std:: ios_base :: basefield равен std::ios_base::oct или std::ios_base::hex , или
- static_cast < long > ( value ) в противном случае.
- Если ранг меньше или равен рангу double , вставляет static_cast < double > ( value ) как в (6) .
- Иначе, если ранг меньше или равен рангу long double , вставляет static_cast < long double > ( value ) как в (7) .
- Иначе вызов данной перегрузки условно поддерживается с определяемой реализацией семантикой.
-
- возникает конец файла во входной последовательности;
- вставка в выходную последовательность завершается неудачей (в этом случае символ для вставки не извлекается);
- возникает исключение (в этом случае исключение перехватывается).
failbit
и, если
failbit
установлен в
exceptions()
, исключение перевыбрасывается.
Содержание |
Параметры
| value | - | целочисленное, число с плавающей запятой, булево значение или указатель для вставки |
| func | - | функция для вызова |
| sb | - | указатель на буфер потока для чтения данных |
Возвращаемое значение
Примечания
Нет перегрузок для указателей на нестатические члены , указателей на volatile, (до C++23) или указателей на функции (кроме тех с сигнатурами, принимаемыми ( 18-20 ) перегрузками).
-
Попытка вывода таких объектов вызывает неявное преобразование в
bool
, и для любого ненулевого значения указателя выводится значение
1
(если не установлен
boolalpha, в этом случае выводится true ).
Аргументы символьного и строкового типа (например, типа char или const char * ) обрабатываются перегрузками не-членами оператора operator << .
- Попытка вывода символа с использованием синтаксиса вызова функции-члена (например, std:: cout . operator << ( 'c' ) ; ) вызовет одну из перегрузок в ( 2-5 ) или ( 11-14 ) и выведет числовое значение.
- Попытка вывода строки символов с использованием синтаксиса вызова функции-члена вызовет перегрузку (8) и напечатает значение указателя вместо строки.
Перегрузка (10) была добавлена резолюцией LWG issue 2221 , но она никогда не реализовывалась ни в одной реализации стандартной библиотеки в режимах C++11/14.
Пример
#include <iomanip> #include <iostream> #include <sstream> int fun() { return 42; } int main() { std::istringstream input(" \"Some text.\" "); double f = 3.14; bool b = true; std::cout << fun() // перегрузка для int (12) << ' ' // внешняя перегрузка << std::boolalpha // перегрузка для функции (18) << b // перегрузка для bool (1) << " " // внешняя перегрузка << std::fixed // перегрузка для функции (18) снова << f // перегрузка для double (6) << input.rdbuf() // перегрузка для streambuf << fun // перегрузка для bool (1): нет перегрузки для int(*)() << std::endl; // перегрузка для функции (18) снова int x = 0; int* p1 = &x; volatile int* p2 = &x; std::cout << "p1: " << p1 << '\n' // перегрузка `const void*`, выводит адрес << "p2: " << p2 << '\n'; // до C++23 (P1147): перегрузка для bool :), потому что // operator<<(const void*) не подходит, так как отбрасывает квалификатор `volatile` // Для исправления этого C++23 добавляет перегрузку `const volatile void*` (9), // которая выводит адрес, как и ожидается. }
Возможный вывод:
42 true 3.140000 "Some text." true p1: 0x7ffcea766600 p2: 0x7ffcea766600
Отчёты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 117 | C++98 |
перегрузки
(1-8,11-15)
делегировали вставку
num_put::put , но он не имеет перегрузок для short , unsigned short , int , unsigned int , и float |
они преобразуются
перед передачей в
num_put::put
|
| LWG 567 | C++98 |
перегрузка
(17)
вела себя как
FormattedOutputFunction
из-за решения LWG issue 60 |
она ведет себя как
UnformattedOutputFunction |
Смотрите также
|
вставляет символьные данные или вставляет в rvalue-поток
(шаблон функции) |
|
|
выполняет потоковый ввод и вывод для строк
(шаблон функции) |
|
|
(C++17)
|
выполняет потоковый вывод для string views
(шаблон функции) |
|
выполняет потоковый ввод и вывод для bitset
(шаблон функции) |
|
|
сериализует и десериализует комплексное число
(шаблон функции) |
|
|
(C++11)
|
выполняет потоковый ввод и вывод для генератора псевдослучайных чисел
(шаблон функции) |
|
(C++11)
|
выполняет потоковый ввод и вывод для распределения псевдослучайных чисел
(шаблон функции) |
|
вставляет символ
(публичная функция-член) |
|
|
вставляет блоки символов
(публичная функция-член) |
|
|
(C++17)
|
преобразует целочисленное или вещественное значение в последовательность символов
(функция) |