더북(TheBook)

이 코드는 squares.txt라는 파일을 생성하고(이미 존재한다면 파일을 덮어 쓴다) 우리가 cout에 쓰는 것처럼 문장을 쓴다. C++는 출력 파일과 std::cout이 만족하는 일반적인 스트림 개념을 설정한다. 이는 우리가 std::cout에 쓸 수 있는 파일에 모든 것을 쓸 수 있음을 의미하며 그 반대의 경우도 마찬가지다. 새로운 타입을 위한 operator<<를 정의할 때 ostream(2.7.3절)에 대해 한 번만 정의하면 콘솔, 파일, 및 다른 출력 스트림에서 동작한다.

또는 스트림의 생성자에 파일 이름을 인수로 전달해 파일을 암시적으로 열 수 있다. 이 파일은 square_file이 스코프를 벗어날 때 암시적으로 닫는다.* 이 경우에는 main 함수의 끝에 닫는다. 이전 프로그램의 짧은 버전은 다음과 같다.

#include <fstream>

int main()
{
    std::ofstream square_file("squares.txt");
    for (int i = 0; i < 10; ++i)
        square_file << i << "^ 2 = " << i * i << std::endl;}
}

우리는 (평소와 같이) 짧은 형태를 선호한다. 명시적 형식은 파일을 처음 선언하고 나중에 어떤 이유로 열릴 때만 필요하다. 마찬가지로 명시적 close 스코프를 벗어나기 전에 파일을 닫아야 하는 경우에만 필요하다.

 

* 2.4.2.1절에서 설명할 RAII라는 강력한 기법 덕분이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.