Namespaces
Variants

operator<< (std::basic_ostream)

From cppreference.net
**Примечание:** Весь код C++ внутри тегов ` ` оставлен без изменений, как и требовалось. HTML-разметка полностью сохранена. Переведена только текстовая метка "(1)" в строке с rowspan="142". **Примечание:** Весь код C++ внутри тегов ` ` оставлен без изменений, как и требовалось. HTML-разметка полностью сохранена. **Примечание:** Весь представленный код находится внутри тегов ` `, которые обозначают блок кода C++. Согласно вашим инструкциям, содержимое внутри таких тегов (включая ` `, `
`, ``) не переводится, а также сохраняются все C++ специфические термины. Поэтому перевод не требуется - весь код оставлен в оригинальном виде.
**Примечание:** Весь представленный код находится внутри тегов ` `, которые обозначают блок кода C++. Согласно вашим требованиям, текст внутри таких блоков (включая ключевые слова C++, имена типов и операторов) не переводится для сохранения технической точности и функциональности кода. **Примечание:** Весь представленный код находится внутри тегов ` `, которые относятся к категории ` `/`
` тегов, поэтому согласно инструкциям перевод не выполняется. HTML-разметка и C++ специфические термины сохранены в оригинальном виде.
**Примечание:** Весь представленный код является C++ кодом внутри тегов ` `, поэтому согласно инструкциям он не подлежит переводу. HTML структура и форматирование полностью сохранены. **Примечание:** Весь представленный код является C++ кодом внутри тегов ` `, поэтому в соответствии с инструкциями он не подлежит переводу. HTML теги и атрибуты также сохранены в оригинальном виде. **Примечание:** В данном фрагменте кода не содержится текста для перевода, так как весь текст находится внутри тегов ` `, которые содержат исключительно C++ код и ключевые слова языка. Согласно инструкциям, C++ специфические термины и код внутри тегов ` `/`
` не переводятся.
**Примечание:** В данном фрагменте кода не требуется перевод, так как: 1. Весь текст находится внутри HTML-тегов форматирования кода 2. Содержит исключительно C++ синтаксис и ключевые слова 3. Не содержит переводимого текстового контента Код представляет собой объявление удаленного оператора вывода для потока wide-символов с указателем на char32_t.
Определено в заголовке <ostream>
basic_ostream и символы
(1)
template < class CharT, class Traits >

basic_ostream < CharT, Traits > &

operator << ( basic_ostream < CharT, Traits > & os, CharT ch ) ;
template < class CharT, class Traits >

basic_ostream < CharT, Traits > &

operator << ( basic_ostream < CharT, Traits > & os, char ch ) ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, char ch ) ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, signed char ch ) ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, unsigned char ch ) ;
basic_ostream и массив символов
(2)
template < class CharT, class Traits >

basic_ostream < CharT, Traits > &

operator << ( basic_ostream < CharT, Traits > & os, const CharT * s ) ;
template < class CharT, class Traits >

basic_ostream < CharT, Traits > &

operator << ( basic_ostream < CharT, Traits > & os, const char * s ) ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const char * s ) ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const signed char * s ) ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const unsigned char * s ) ;
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 > &

operator << ( basic_ostream < char , Traits > & os, wchar_t ch ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, char8_t ch ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, char16_t ch ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, char32_t ch ) = delete ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operator << ( basic_ostream < wchar_t , Traits > & os, char8_t ch ) = delete ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operator << ( basic_ostream < wchar_t , Traits > & os, char16_t ch ) = delete ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operator << ( basic_ostream < wchar_t , Traits > & os, char32_t ch ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const wchar_t * s ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const char8_t * s ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const char16_t * s ) = delete ;
template < class Traits >

basic_ostream < char , Traits > &

operator << ( basic_ostream < char , Traits > & os, const char32_t * s ) = delete ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operator << ( basic_ostream < wchar_t , Traits > & os, const char8_t * s ) = delete ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operator << ( basic_ostream < wchar_t , Traits > & os, const char16_t * s ) = delete ;
template < class Traits >

basic_ostream < wchar_t , Traits > &

operator << ( basic_ostream < wchar_t , Traits > & os, const char32_t * s ) = delete ;

Вставляет символ или строку символов.

1) Ведет себя как FormattedOutputFunction . После создания и проверки объекта sentry , вставляет символ ch . Если ch имеет тип char и character container type для os не является char , вместо этого будет вставлен os. widen ( ch ) .
Заполнение определяется следующим образом:
  • Если os. width ( ) > 1 , то os. width ( ) - 1 копий os. fill ( ) добавляются к выходному символу для формирования последовательности выходных символов.
  • Если ( out. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left , символы заполнения размещаются после выходного символа, в противном случае — перед ним.
После вставки, os. width ( 0 ) вызывается для отмены эффектов std::setw , если таковые имеются.
2) Ведет себя как FormattedOutputFunction . После создания и проверки сторожевого объекта вставляет последовательные символы из массива символов, на первый элемент которого указывает s .
  • Для первой и третьей перегрузок (где CharT соответствует типу ch ), вставляется ровно traits :: length ( s ) символов.
  • Для второй перегрузки вставляется ровно std:: char_traits < char > :: length ( s ) символов.
  • Для последних двух перегрузок вставляется ровно traits :: length ( reinterpret_cast < const char * > ( s ) ) символов.
Перед вставкой сначала все символы расширяются с помощью os. widen ( ) , затем заполнение определяется следующим образом:
  • Если количество символов для вставки меньше os. width ( ) , то в последовательность символов добавляется достаточное количество копий os. fill ( ) , чтобы её длина стала равна os. width ( ) .
  • Если ( out. flags ( ) & std:: ios_base :: adjustfield ) == std:: ios_base :: left , символы заполнения добавляются в конец выходной последовательности, в противном случае они добавляются перед выходной последовательностью.
После вставки, os. width ( 0 ) вызывается для отмены эффектов std::setw , если таковые имеются.
Если s является нулевым указателем, поведение не определено.
3) Вызывает соответствующий оператор вставки, принимая rvalue-ссылку на объект выходного потока (эквивалентно os << value ). Эта перегрузка участвует в разрешении перегрузки только если выражение os << value является корректным и Ostream является типом класса, публично и однозначно унаследованным от std::ios_base .
4) Перегрузки, принимающие char16_t , char32_t и т.д. (или нуль-терминированные последовательности этих типов), удалены: std:: cout << u 'X' не разрешено. Ранее такие выражения выводили целочисленное значение или значение указателя.

Содержание

Параметры

os - выходной поток для вставки данных
ch - ссылка на символ для вставки
s - указатель на строку символов для вставки

Возвращаемое значение

1,2) os
3) std :: move ( os )

Примечания

До 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)
выводит форматированное представление аргументов
(function template)
расширяет символы
(public member function of std::basic_ios<CharT,Traits> )