std::basic_ios<CharT,Traits>:: tie
|
std::
basic_ostream
<
CharT, Traits
>
*
tie
(
)
const
;
|
(1) | |
|
std::
basic_ostream
<
CharT, Traits
>
*
tie
(
std::
basic_ostream
<
CharT, Traits
>
*
str
)
;
|
(2) | |
関連付けられたストリームを管理します。関連付けられたストリームとは、ストリームバッファ( rdbuf() )によって制御されるシーケンスと同期する出力ストリームであり、つまり、 flush ( ) が * this に対するいかなる入出力操作の前にも関連付けられたストリームで呼び出されます。
目次 |
パラメータ
| str | - | 紐付けられる出力ストリームとして設定する出力ストリーム |
戻り値
関連付けられたストリーム、または関連付けられたストリームがない場合はnullポインタ。
例外
実装定義の例外をスローする可能性があります。
注記
デフォルトでは、標準ストリーム std::cout は std::cin および std::cerr に結び付けられています。同様に、そのワイド文字版である std::wcout は std::wcin および std::wcerr に結び付けられています。
例
#include <fstream> #include <iomanip> #include <iostream> #include <string> int main() { std::ofstream os("test.txt"); std::ifstream is("test.txt"); std::string value("0"); os << "Hello"; is >> value; std::cout << "Result before tie(): " << std::quoted(value) << "\n"; is.clear(); is.tie(&os); is >> value; std::cout << "Result after tie(): " << std::quoted(value) << "\n"; }
出力:
Result before tie(): "0" Result after tie(): "Hello"
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 835 | C++98 |
2つのストリームが互いに結びつけられる可能性があった
[1]
(直接的に、または中間ストリームオブジェクトを介して) |
この場合の動作は未定義 |
-
↑
std::basic_ostream::flush()
は
UnformattedOutputFunction
であるため、呼び出し時にセントリオブジェクトを作成します。ストリームオブジェクトで
flush()が呼び出されると、 セントリオブジェクトのコンストラクタ はその関連付けられたストリームのflush()を呼び出し、そのflush()は別のセントリオブジェクトを構築し、そのコンストラクタはそのストリームの関連付けられたストリームのflush()を呼び出し、以下同様に続きます。したがって、ストリーム a と b が(直接的または間接的に)互いに結びついている場合、 a. flush ( ) を呼び出すと最終的に b. flush ( ) が呼び出され、それが最終的に a. flush ( ) を呼び出し、無限ループが発生します。