Namespaces
Variants

std::basic_ostream<CharT,Traits>:: operator<<

From cppreference.net
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 )

( std:: basic_ostream < CharT, Traits > & ) ) ;
(20)

스트림에 데이터를 삽입합니다.

1-8) value 를 삽입합니다.
이 함수는 FormattedOutputFunction 으로 동작합니다. sentry 객체를 생성하고 검사한 후, std::num_put::put() 을 호출하여 값을 삽입합니다. 출력 중 파일 끝 조건이 발생한 경우 ( put ( ) . failed ( ) == true ), badbit 을 설정합니다.
9) 다음에 해당함 return operator << ( const_cast < const void * > ( p ) ) ; .
10) 다음 표현식과 동등합니다: return * this << s ; , 여기서 s 는 구현에서 정의된 null-terminated 문자 타입 문자열입니다.
11) short value 에서 값을 삽입합니다.
이 함수는 FormattedOutputFunction 으로 동작합니다. sentry 객체를 구성하고 검사한 후, long lval (2) 와 같이 삽입합니다. 여기서 lval
12) int value 에서 값을 삽입합니다.
이 함수는 FormattedOutputFunction 으로 동작합니다. sentry 객체를 구성하고 검사한 후, (2) 와 같이 lval long 값으로 삽입합니다. 여기서 lval 은 다음 중 하나입니다:
13,14) unsigned short 또는 unsigned int value 에서 값을 삽입합니다.
이 함수는 FormattedOutputFunction 으로 동작합니다. sentry 객체를 구성하고 검사한 후, static_cast < unsigned long > ( value ) (3) 에서와 같이 삽입합니다.
15) float value 에서 값을 삽입합니다.
이 함수는 FormattedOutputFunction 으로 동작합니다. sentry 객체를 구성하고 검사한 후, static_cast < double > ( value ) (6) 에서와 같이 삽입합니다.
16) value 에서 값을 삽입합니다. 라이브러리는 매개변수 value의 타입으로 모든 cv-비한정 확장 부동소수점 타입 에 대한 오버로드를 제공합니다.
이 함수는 FormattedOutputFunction 로 동작합니다. sentry 객체를 구성하고 검사한 후, /* extended-floating-point-type */ floating-point conversion rank 를 확인합니다:
  • rank가 double 의 rank보다 작거나 같은 경우, static_cast < double > ( value ) (6) 과 같이 삽입합니다.
  • 그렇지 않고 rank가 long double 의 rank보다 작거나 같은 경우, static_cast < long double > ( value ) (7) 과 같이 삽입합니다.
  • 그렇지 않은 경우, 이 오버로드의 호출은 구현 정의 의미를 갖는 조건부 지원됩니다.
17) 이 함수는 UnformattedOutputFunction 로 동작합니다. sentry 객체를 구성하고 검사한 후, sb 가 null 포인터인지 확인합니다. 만약 null 포인터라면 setstate ( badbit ) 를 실행하고 종료합니다. 그렇지 않으면, sb 에 의해 제어되는 입력 시퀀스에서 문자를 추출하여 * this 에 삽입하며, 다음 조건 중 하나가 충족될 때까지 이 작업을 계속합니다:
  • 입력 시퀀스에서 파일 끝(end-of-file)이 발생하는 경우;
  • 출력 시퀀스에 삽입하는 데 실패하는 경우 (이 경우 삽입될 문자는 추출되지 않음);
  • 예외가 발생하는 경우 (이 경우 예외는 catch됨).
어떤 문자도 삽입되지 않았다면 setstate ( failbit ) 를 실행합니다. 추출 중 예외가 발생했다면 failbit 를 설정하고, failbit exceptions() 에 설정되어 있다면 예외를 다시 던집니다.
18-20) func ( * this ) 를 호출합니다. 이러한 오버로드는 std::endl 과 같은 출력 I/O 매니퓰레이터를 구현하는 데 사용됩니다.

목차

매개변수

value - 삽입할 정수, 부동소수점, 불리언 또는 포인터 값
func - 호출할 함수
sb - 데이터를 읽어올 스트림 버퍼에 대한 포인터

반환값

1-19) * this
20) func ( * this )

참고 사항

비정적 멤버에 대한 포인터 , volatile에 대한 포인터, (C++23 이전) 또는 함수 포인터에 대한 오버로드가 존재하지 않습니다 ( 18-20 ) 오버로드들에서 허용되는 시그니처를 가진 것들은 제외).

  • 이러한 객체를 출력하려고 시도하면 bool 으로의 암시적 변환이 발생하며, null이 아닌 모든 포인터 값에 대해 값 1 이 출력됩니다( boolalpha 가 설정된 경우에는 true 가 출력됨).

문자 및 문자열 인수(예: char 타입 또는 const char * 타입)는 비멤버 오버로드 에 의해 처리됩니다. operator <<

  • 멤버 함수 호출 구문(예: std:: cout . operator << ( 'c' ) ; )을 사용하여 문자를 출력하려고 하면 ( 2-5 ) 또는 ( 11-14 ) 의 오버로드 중 하나를 호출하여 숫자 값을 출력합니다.
  • 멤버 함수 호출 구문을 사용하여 문자열을 출력하려고 하면 (8) 오버로드를 호출하여 포인터 값을 출력합니다.

오버로드 (10) LWG 이슈 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 이슈 60 의 해결로 인해)
이는
UnformattedOutputFunction 으로 동작함

참고 항목

문자 데이터를 삽입하거나 rvalue 스트림에 삽입
(함수 템플릿)
문자열에 대한 스트림 입력 및 출력 수행
(함수 템플릿)
(C++17)
string view에 대한 스트림 출력 수행
(함수 템플릿)
bitset의 스트림 입력 및 출력 수행
(함수 템플릿)
복소수의 직렬화 및 역직렬화 수행
(함수 템플릿)
의사 난수 엔진에 대한 스트림 입력 및 출력 수행
(함수 템플릿)
의사 난수 분포에 대한 스트림 입력 및 출력 수행
(함수 템플릿)
문자 삽입
(public 멤버 함수)
문자 블록 삽입
(public 멤버 함수)
(C++17)
정수 또는 부동소수점 값을 문자 시퀀스로 변환
(함수)