operator<<(std::basic_ostream)
| ヘッダ <ostream>で定義 |
||
| basic_ostreamと文字 |
||
| (1) | ||
| template< class CharT, class Traits > basic_ostream<CharT, Traits>& |
||
| template< class CharT, class Traits > basic_ostream<CharT, Traits>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| basic_ostreamと文字配列 |
||
| (2) | ||
| template< class CharT, class Traits > basic_ostream<CharT, Traits>& |
||
| template< class CharT, class Traits > basic_ostream<CharT, Traits>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| basic_ostream の右辺値 |
||
| 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>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| template< class Traits > basic_ostream<wchar_t, Traits>& |
||
| template< class Traits > basic_ostream<wchar_t, Traits>& |
||
| template< class Traits > basic_ostream<wchar_t, Traits>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| template< class Traits > basic_ostream<char, Traits>& |
||
| template< class Traits > basic_ostream<wchar_t, Traits>& |
||
| template< class Traits > basic_ostream<wchar_t, Traits>& |
||
| template< class Traits > basic_ostream<wchar_t, Traits>& |
||
文字または文字文字列を挿入します。
- もし os.width() > 1 ならば、os.width() - 1 個の os.fill() のコピーが出力文字に追加され、出力文字シーケンスが形成されます。
- もし (out.flags() & std::ios_base::adjustfield) == std::ios_base::left ならば、パディング文字は出力文字の後に追加され、そうでなければ前に追加されます。
- 最初のオーバーロードと3番目のオーバーロード(
CharTがchの型と一致する場合)では、正確にtraits::length(s)文字が挿入されます。 - 2番目のオーバーロードでは、正確にstd::char_traits<char>::length(s)文字が挿入されます。
- 最後の2つのオーバーロードでは、正確にtraits::length(reinterpret_cast<const char*>(s))文字が挿入されます。
- 挿入される文字数がos.width()よりも少ない場合、文字シーケンスの長さがos.width()と等しくなるように、os.fill()のコピーが十分に追加されます。
- もし (out.flags() & std::ios_base::adjustfield) == std::ios_base::left ならば、パディング文字は出力シーケンスの末尾に追加され、そうでなければ出力シーケンスの前に追加されます。
Ostreamがstd::ios_baseから公開かつ一意に派生したクラス型である場合にのみ、オーバーロード解決に参加します。目次 |
[編集] パラメータ
| os | - | データを挿入する出力ストリーム |
| 文字 | - | 挿入する文字への参照 |
| s | - | 挿入する文字文字列へのポインタ |
[編集] 戻り値
[編集] 注釈
LWG issue 1203 より前は、(std::ostringstream() << 1.2).str()のようなコードはコンパイルされませんでした。
[編集] 例
#include <fstream> #include <iostream> void foo() { // error: operator<< (basic_ostream<char, _Traits>&, char8_t) is deleted // 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" // uses `const char*` overload << '\n'; // uses `char` overload std::ofstream{"test.txt"} << 1.2; // uses rvalue overload std::cout << u8'!' << '\n'; // uses program-defined operator<<(os, char8_t const&) }
出力
Hello, world !
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 167 | C++98 | (2) のすべてのオーバーロードで挿入される文字数 は traits::length(s) でした |
オーバーロードの数値が更新されましたCharTがchの型と一致しない場合 |
| LWG 1203 | C++11 | 右辺値ストリームのオーバーロードが返された 基底クラスへの左辺値参照 |
右辺値参照を返します 派生クラスへ |
| LWG 2011 | C++98 | パディングは std::num_put::do_put() によって決定されていました | 演算子自体によって決定されます |
| LWG 2534 | C++11 | 右辺値ストリームのオーバーロードに制約がありませんでした | 制約付き |
[編集] 関連項目
| 書式付きデータを挿入する (public member function) | |
| (C++23) |
引数の書式化された表現を出力する (関数テンプレート) |
| 文字をワイド化する ( std::basic_ios<CharT,Traits> の public メンバ関数) |