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 ) - 그 외의 경우.
- rank가 double 의 rank보다 작거나 같은 경우, static_cast < double > ( value ) 를 (6) 과 같이 삽입합니다.
- 그렇지 않고 rank가 long double 의 rank보다 작거나 같은 경우, static_cast < long double > ( value ) 를 (7) 과 같이 삽입합니다.
- 그렇지 않은 경우, 이 오버로드의 호출은 구현 정의 의미를 갖는 조건부 지원됩니다.
-
- 입력 시퀀스에서 파일 끝(end-of-file)이 발생하는 경우;
- 출력 시퀀스에 삽입하는 데 실패하는 경우 (이 경우 삽입될 문자는 추출되지 않음);
- 예외가 발생하는 경우 (이 경우 예외는 catch됨).
failbit
를 설정하고,
failbit
가
exceptions()
에 설정되어 있다면 예외를 다시 던집니다.
목차 |
매개변수
| value | - | 삽입할 정수, 부동소수점, 불리언 또는 포인터 값 |
| func | - | 호출할 함수 |
| sb | - | 데이터를 읽어올 스트림 버퍼에 대한 포인터 |
반환값
참고 사항
비정적 멤버에 대한 포인터 , 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의 스트림 입력 및 출력 수행
(함수 템플릿) |
|
|
복소수의 직렬화 및 역직렬화 수행
(함수 템플릿) |
|
|
(C++11)
|
의사 난수 엔진에 대한 스트림 입력 및 출력 수행
(함수 템플릿) |
|
(C++11)
|
의사 난수 분포에 대한 스트림 입력 및 출력 수행
(함수 템플릿) |
|
문자 삽입
(public 멤버 함수) |
|
|
문자 블록 삽입
(public 멤버 함수) |
|
|
(C++17)
|
정수 또는 부동소수점 값을 문자 시퀀스로 변환
(함수) |