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 이 널이 아니고 tie ( ) str - > tie ( ) 에서 시작하여 연결된 스트림 객체들의 연결 리스트를 순회하여 도달 가능한 경우, 동작은 정의되지 않습니다.

목차

매개변수

str - 연결할 출력 스트림

반환값

연결된 스트림, 또는 연결된 스트림이 없었던 경우 널 포인터.

예외

구현 정의 예외를 던질 수 있습니다.

참고 사항

기본적으로, 표준 스트림 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 적용 대상 게시된 동작 올바른 동작
LWG 835 C++98 두 스트림이 서로 tie될 수 있었음 [1]
(직접적으로 또는 다른 중간 스트림 객체를 통해)
이 경우 동작은 정의되지 않음
  1. std::basic_ostream::flush() UnformattedOutputFunction 이므로 호출 시 센트리 객체를 생성합니다. 스트림 객체에서 flush() 가 호출되면, 센트리 객체의 생성자 는 연결된 스트림의 flush() 를 호출하며, 그 flush() 는 또 다른 센트리 객체를 생성하고 해당 생성자는 그 스트림의 연결된 스트림에서 flush() 를 호출하는 식으로 진행됩니다. 따라서 스트림 a b 가 (직접적 또는 간접적으로) 서로 연결되어 있을 경우, a. flush ( ) 를 호출하면 결국 b. flush ( ) 가 호출되고, 이는 다시 a. flush ( ) 를 호출하게 되어 무한 루프가 발생하게 됩니다.