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::
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_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) のように挿入する。
- それ以外の場合、このオーバーロードの呼び出しは条件付きでサポートされ、実装定義のセマンティクスを持つ。
-
- 入力シーケンスでEOF(ファイル終端)が発生する;
- 出力シーケンスへの挿入が失敗する(この場合、挿入対象の文字は抽出されない);
- 例外が発生する(この場合、例外は捕捉される)。
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 として動作する |
関連項目
|
文字データを挿入、または右辺値ストリームに挿入
(関数テンプレート) |
|
|
文字列に対するストリーム入出力を実行
(関数テンプレート) |
|
|
(C++17)
|
文字列ビューに対するストリーム出力を実行
(関数テンプレート) |
|
ビットセットのストリーム入出力を実行
(関数テンプレート) |
|
|
複素数のシリアライズとデシリアライズ
(関数テンプレート) |
|
|
(C++11)
|
擬似乱数エンジンに対するストリーム入出力を実行
(関数テンプレート) |
|
(C++11)
|
擬似乱数分布に対するストリーム入出力を実行
(関数テンプレート) |
|
文字を挿入
(公開メンバ関数) |
|
|
文字ブロックを挿入
(公開メンバ関数) |
|
|
(C++17)
|
整数または浮動小数点値を文字シーケンスに変換
(関数) |