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 | - | 연결할 출력 스트림 |
반환값
연결된 스트림, 또는 연결된 스트림이 없었던 경우 널 포인터.
예외
구현 정의 예외를 던질 수 있습니다.
참고 사항
기본적으로, 표준 스트림 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]
(직접적으로 또는 다른 중간 스트림 객체를 통해) |
이 경우 동작은 정의되지 않음 |
-
↑
std::basic_ostream::flush()
는
UnformattedOutputFunction
이므로 호출 시 센트리 객체를 생성합니다. 스트림 객체에서
flush()가 호출되면, 센트리 객체의 생성자 는 연결된 스트림의flush()를 호출하며, 그flush()는 또 다른 센트리 객체를 생성하고 해당 생성자는 그 스트림의 연결된 스트림에서flush()를 호출하는 식으로 진행됩니다. 따라서 스트림 a 와 b 가 (직접적 또는 간접적으로) 서로 연결되어 있을 경우, a. flush ( ) 를 호출하면 결국 b. flush ( ) 가 호출되고, 이는 다시 a. flush ( ) 를 호출하게 되어 무한 루프가 발생하게 됩니다.