Namespaces
Variants

std::basic_ios<CharT,Traits>:: tie

From cppreference.net
std:: basic_ostream < CharT, Traits > * tie ( ) const ;
(1)
std:: basic_ostream < CharT, Traits > * tie ( std:: basic_ostream < CharT, Traits > * str ) ;
(2)

関連付けられたストリームを管理します。関連付けられたストリームとは、ストリームバッファ( rdbuf() )によって制御されるシーケンスと同期する出力ストリームであり、つまり、 flush ( ) * this に対するいかなる入出力操作の前にも関連付けられたストリームで呼び出されます。

1) 現在の関連付けられたストリームを返します。関連付けられたストリームがない場合は、ヌルポインタが返されます。
2) 現在の関連付けられたストリームを str に設定します。操作前の関連付けられたストリームを返します。関連付けられたストリームが存在しない場合、ヌルポインタが返されます。 str がヌルでなく、かつ str - > tie ( ) から開始する関連付けられたストリームオブジェクトのリンクリストを走査することで tie ( ) に到達可能な場合、動作は未定義です。

目次

パラメータ

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]
(直接的に、または中間ストリームオブジェクトを介して)
この場合の動作は未定義
  1. std::basic_ostream::flush() UnformattedOutputFunction であるため、呼び出し時にセントリオブジェクトを作成します。ストリームオブジェクトで flush() が呼び出されると、 セントリオブジェクトのコンストラクタ はその関連付けられたストリームの flush() を呼び出し、その flush() は別のセントリオブジェクトを構築し、そのコンストラクタはそのストリームの関連付けられたストリームの flush() を呼び出し、以下同様に続きます。したがって、ストリーム a b が(直接的または間接的に)互いに結びついている場合、 a. flush ( ) を呼び出すと最終的に b. flush ( ) が呼び出され、それが最終的に a. flush ( ) を呼び出し、無限ループが発生します。