operator<<,>>(std::basic_string)
ヘッダ <string> で定義
|
||
template <class CharT, class Traits, class Allocator> std::basic_ostream<CharT, Traits>& |
(1) | |
template <class CharT, class Traits, class Allocator> std::basic_istream<CharT, Traits>& |
(2) | |
1) FormattedOutputFunction として動作します。 sentry オブジェクトの構築および確認の後、出力書式のパディングが以下のように決定されます。
- a)
str.size()
がos.width()
より小さくなければ、範囲[str.begin(), str.end())
をそのまま使用します。 - b) そうでなく、 (os.flags() & ios_base::adjustfield) == ios_base::left であれば、文字シーケンスの後に
os.fill()
文字のコピーをos.width()-str.size()
個置きます。 - c) そうでなければ、文字シーケンスの前に
os.fill()
文字のコピーをos.width()-str.size()
個置きます。
その後、 os.rdbuf()->sputn(seq, std::max(os.width(), str.size())) によって行われるかのように、結果の文字シーケンス (str
の内容 + パディング) から各文字が出力ストリーム os
に格納されます。
最後に、 std::setw の効果 (もしあれば) を取り消すた��に、 os.width(0) を呼びます。
2) FormattedInputFunction として動作します。 sentry オブジェクトの構築および確認 (先頭のホワイトスペースをスキップするかもしれない) の後、まず str
を str.erase() でクリアし、そして以下の条件のいずれかが真となるまで、 is
から文字を読み込み、それを str.append(1, c) で行われたかのように str
に追加します。
-
N
個の文字が読み込まれる。 ただし、is.width() > 0
の場合N
はis.width()
、そうでなければN
はstr.max_size()
です。 - ストリーム
is
で end-of-file の条件が発生する。 -
is
内の次の文字c
に対して std::isspace(c,is.getloc()) が真となる (このホワイトスペース文字は入力ストリームに残されます)。
1文字も抽出されなければ is
に std::ios::failbit が設定されます。 これは std::ios_base::failure を投げる場合があります。
最後に、 std::setw の効果 (もしあれば) を取り消すために、 os.width(0) を呼びます。
目次 |
[編集] 例外
1) 出力中に例外が投げられた場合、 std::ios_base::failure を投げるかもしれません。
2) is
から1文字も抽出されない場合 (例えばストリームがファイルの終端であるとか、ホワイトスペースのみで構成されるとか)、または入力中に例外が投げられた場合、 std::ios_base::failure を投げるかもしれません。
[編集] 引数
os | - | 文字出力ストリーム |
is | - | 文字入力ストリーム |
str | - | 挿入元または抽出先の文字列 |
[編集] 戻り値
1) os
。
2) is
。
[編集] 例
#include <iostream> #include <string> #include <sstream> int main() { std::string greeting = "Hello, whirled!"; std::istringstream is(greeting); std::string hello_comma; std::string whirled; is >> hello_comma; is >> whirled; std::cout << greeting << '\n'; std::cout << hello_comma << '\n' << whirled << '\n'; }
出力:
Hello, whirled! Hello, whirled!