입출력(C++)
Input/output (C++)| C++ 표준 라이브러리 |
|---|
| 컨테이너 |
| C 표준 라이브러리 |
입출력 라이브러리는 C++ 프로그래밍 언어에서 스트림 기반 입출력 기능을 구현하는 C++ Standard Library의 클래스 템플릿 및 지원 기능 제품군을 말한다.[1][2]C 표준 라이브러리에서 C의 FILE 기반 스트림에 대한 객체 지향적인 대안이다.[3][4]
역사
C++를 만든 Bjarne Strustrup은 1984년에 Stream I/O 라이브러리의 첫 번째 버전을 C의 I/O 라이브러리에 대한 유형 안전하고 확장 가능한 대안으로 썼다.[5]도서관은 이 초기 버전 이후 서식을 제어하기 위한 조작기 도입, 다른 문자 유형과 함께 사용할 수 있도록 하는 템플화 등 여러 가지 개선을 거쳤다.char.
1998년 표준화는 도서관이 이전하는 것을 보았다.std네임스페이스, 기본 헤더가 다음에서 변경됨<iostream.h>로<iostream>이 글의 나머지 부분에 대해 다루고 있는 것은 이 표준화된 버전이다.
개요
도서관에 있는 대부분의 수업은 사실 매우 일반화된 수업 템플릿이다.각 템플릿은 다양한 문자 유형에서 동작할 수 있으며, 두 문자를 평등하게 비교하는 방법 등 조작 자체도 커스터마이징이 가능하다.그러나 코드의 대다수는 한두 개의 문자 유형만을 사용하여 입력 및 출력 작업을 해야 하므로, 일반적으로 사용되는 템플릿과 문자 유형의 조합에 대한 이름을 지정하는 몇 개의 타이핑을 통해 기능에 접근하는 경우가 대부분이다.
예를 들어,basic_fstream<CharT,Traits>파일 스트림에서 입력/출력 작업을 구현하는 일반 클래스 템플릿을 가리킨다.보통 으로 쓰인다.fstream에 대한 가명이다.basic_fstream<char,char_traits<char>>또는, 다시 말하면,basic_fstream유형 문자 작업char기본 문자 작업 세트와 함께.
도서관의 수업은 추상화와 구현의 두 가지 범주로 나눌 수 있다.추상화 범주에 속하는 클래스는 스트림 유형으로 작업하기에 충분한 인터페이스를 제공한다.그러한 클래스를 사용하는 코드는 데이터가 읽히거나 쓰여진 정확한 위치에 따라 달라지지 않는다.예를 들어, 그러한 코드는 재컴파일 없이 파일, 메모리 버퍼 또는 웹 소켓에 데이터를 쓸 수 있다.구현 클래스는 추상화 클래스를 상속하고 구체적인 유형의 데이터 소스 또는 싱크에 대한 구현을 제공한다.라이브러리는 파일 기반 스트림과 메모리 버퍼 기반 스트림에 대해서만 구현을 제공한다.
도서관의 수업도 저수준의 운영을 실시하느냐 고수준의 운영을 실시하느냐에 따라 두 그룹으로 나눌 수 있었다.낮은 수준의 것들을 다루는 클래스를 스트림 버퍼라고 부른다.그들은 어떠한 포맷 기능도 제공하지 않고 문자로 작동한다.이러한 수업은 직접적으로 사용되는 경우가 매우 드물다.고급 클래스를 스트림이라고 하며 다양한 포맷 기능을 제공한다.그것들은 스트림 버퍼 위에 지어졌다.
다음 표는 입출력 라이브러리에서 제공하는 모든 클래스를 나열하고 분류한다.
| 클래스 | 설명 | 타이페이드 |
|---|---|---|
| 스트림 버퍼(로우 레벨 기능) | ||
basic_streambuf | 구체적인 데이터 소스 또는 싱크에 구현할 수 있는 추상적인 낮은 수준의 입출력 인터페이스를 제공한다.직접 사용하는 경우는 거의 없다. |
|
basic_filebuf | 파일 기반 스트림을 위한 낮은 수준의 입출력 인터페이스 구현.직접 사용하는 경우는 거의 없다. |
|
basic_stringbuf | 문자열 기반 스트림을 위한 로우 레벨 입력/출력 인터페이스 구현.직접 사용하는 경우는 거의 없다. |
|
| 지원 클래스 | ||
ios_base | 서식 정보 및 예외 상태 관리 | 해당 없음 |
basic_ios | 스트림 버퍼 관리 |
|
| 입력 스트림 버퍼(고급 기능) | ||
basic_istream | 추상 스트림 버퍼를 래핑하고 포맷 기능과 같은 고급 입력 인터페이스를 제공한다. |
|
basic_ifstream | 파일 스트림 버퍼를 감는 입력 스트림일반 입력 스트림 외에 파일 열기 또는 닫기 기능 제공 |
|
basic_istringstream | 문자열 스트림 버퍼를 감는 입력 스트림일반 입력 스트림의 문자열 이외에 기본 문자열에 액세스할 수 있는 기능 제공 |
|
| 출력 스트림 버퍼(고급 기능) | ||
basic_ostream | 추상 스트림 버퍼를 래핑하고 포맷 기능과 같은 높은 수준의 출력 인터페이스를 제공한다. |
|
basic_ofstream | 파일 스트림 버퍼를 감싼 출력 스트림일반 출력 스트림 외에 파일 열기 또는 닫기 기능 제공 |
|
basic_ostringstream | 스트링 스트림 버퍼를 감는 출력 스트림일반 출력 스트림의 문자열과 더불어 기본 문자열에 액세스할 수 있는 기능 제공 |
|
| 입출력 스트림 버퍼(고급 기능) | ||
basic_iostream | 추상 스트림 버퍼를 래핑하고 포맷 기능과 같은 높은 수준의 입출력 인터페이스를 제공한다. |
|
basic_fstream | 파일 스트림 버퍼를 감싼 입력/출력 스트림일반 입력/출력 스트림 외에도 파일을 열거나 닫을 수 있는 기능 제공 |
|
basic_stringstream | 스트링 스트림 버퍼를 감싼 입출력 스트림일반 입력/출력 스트림과 더불어 기본 문자열에 액세스할 수 있는 기능 제공 |
|
헤더 파일
입력/출력 라이브러리의 클래스는 여러 헤더에 위치한다.
<ios>의 정의를 포함하고 있다.ios_base그리고basic_ios형식 정보 및 관련 스트림 맵을 관리하는 클래스.<istream>의 정의를 포함하고 있다.basic_istream형식화된 입력을 구현하는 클래스 템플릿.<ostream>의 정의를 포함하고 있다.basic_ostream형식화된 출력을 구현하는 클래스 템플릿.<iostream>의 정의를 포함하고 있다.basic_iostream형식화된 입력 및 출력을 구현하고 다음을 포함하는 클래스 템플릿<ios>,<istream>그리고<ostream>.<fstream>의 정의를 포함하고 있다.basic_ifstream,basic_ofstream그리고basic_fstream파일 스트림에서 형식화된 입력, 출력 및 입/출력을 구현하는 클래스 템플릿.<sstream>의 정의를 포함하고 있다.basic_istringstream,basic_ostringstream그리고basic_stringstream문자열 기반 스트림에서 형식화된 입력, 출력 및 입출력 기능을 구현하는 클래스 템플릿.<iomanip>포맷 조작자를 포함한다.<iosfwd>입력/출력 라이브러리에 있는 모든 클래스의 정방향 선언 포함.
스트림 버퍼
테이블로서 C++ 언어로 정의된 12개의 스트림 버퍼 클래스가 있다.
지원 클래스
ios_base그리고basic_ios스트림의 하위 비트를 관리하는 두 클래스. ios_base형식 정보 및 스트림 상태 저장 basic_ios관련 스트림-프로세스를 관리한다. basic_ios흔히 단순하게 알려져 있다.ios또는wios, 에 대한 두 개의 타이프.basic_ios특정 문자 유형으로. basic_ios그리고ios_base프로그래머가 직접 사용하는 경우는 매우 드물다.일반적으로, 그들의 기능성은 다음과 같은 다른 클래스를 통해 액세스된다.iostream그들을 [6][7]물려받았지
타이페이드
| 이름 | 설명 |
|---|---|
ios | a에 대한 편의성 타이프basic_ios유형 문자 작업char |
wios | a에 대한 편의성 타이프basic_ios유형 문자 작업wchar_t |
streamoff | 내부 운영을 지원한다. |
streampos | 버퍼 포인터 또는 파일 포인터 현재 위치를 유지하십시오. |
wstreampos | 버퍼 포인터 또는 파일 포인터 현재 위치를 유지하십시오. |
streamsize | 스트림의 크기를 지정하십시오. |
조작기 서식 지정
| 이름 | 설명 |
|---|---|
boolalpha/noboolalpha | 유형의 변수인지 여부를 지정함bool로 나타나다.true그리고false또는 로서0그리고1개울에 |
skipws/noskipws | 입력 작업에서 공백을 건너뛰는지 여부를 지정하십시오. |
showbase/noshowbase | 숫자의 공칭 기준이 표시되는지 여부를 지정함 |
showpoint/noshowpoint | 분수 부분이 0인 경우 부동 소수점 번호의 분수 부분을 표시할지 여부를 지정함 |
showpos/noshowpos | 표시 여부를 지정함+긍정적인 숫자로 |
unitbuf/nounitbuf | 출력을 버퍼링할지 여부를 지정함 |
uppercase/nouppercase | 대문자를 16진수 정수 및 부동 소수점 출력에 사용할지 여부를 지정함 |
left/right/internal | 숫자를 어떻게 정당화해야 하는지를 지정 |
dec/oct/hex | 정수 번호가 표시되어야 하는 표기법을 지정한다. |
fixed/scientific/hexfloat(C++11) /defaultfloat(C++11) | 부동 소수점 번호가 표시되어야 하는 표기법을 지정한다. |
입출력 스트림
C++입력/출력 스트림은 주로 에 의해 정의되며, C++ 표준 라이브러리의 일부인 헤더 파일(이름은 입력/출력 스트림을 의미한다).C++와 그 전신인 C 프로그래밍 언어에서는 데이터 입력이나 출력을 스트리밍하기 위한 특별한 구문이 없다.대신, 이것들은 기능의 라이브러리로 결합된다.Like thatcstdioC의 stdio.h로부터 물려받은 헤더,iostream C++ 프로그램을 위한 기본 입력 및 출력 서비스를 제공한다.iostream은 각각 , , , , 를cin 사용하여 표준 스트림 입력, 출력, 오류(버퍼링되지 않음), 로그(배터리됨)로 데이터를 보내고 받는다.C++ 표준 라이브러리의 일부로, 이러한 개체는 네임스페이스의 일부분이다.[8]
그cout 개체 메서드 cascading에 대해 다른 구문, 유창한 interfa이 노출되자 본질적으로로 이것은 그 집을 마치 수술 bitwise 작전과는 무관하고 특히 왼쪽 인수의 값을 평가하여 대통령으로 만들기 위해 같은 ostream 개체에 여러개의 작전을 허용하는 왼쪽 bit-shift 사업자 overloads형 ostream,이다.ce.와 물체 또한 유형이기 때문에, 그들은 또한 그 연산자에 과부하를 가한다.이 개체는 우측 비트 이동 연산자에 과부하를 가하는 유형이다.비트 시프트 연산자의 방향은 데이터가 출력 스트림을 향해 흐르거나 입력 스트림에서 멀어지는 것처럼 보이게 한다.
출력 형식
방법들
width(int x) | 다음 출력의 최소 문자 수 |
fill(char x) | 최소값을 채우기 위해 폭의 길이를 늘려야 하는 경우 채우는 데 사용되는 문자. |
precision(int x) | 부동 소수점 숫자의 유의한 자릿수 설정 |
조작기
조작기(Manipulator)는 를 사용하여 스트림을 수정할 수 있는 객체다.<<또는>>교환원
endl | "엔드 라인": 시내에 새로운 라인을 삽입하고 플러시를 호출한다. |
ends | "끝 문자열": 스트림에 null 문자를 삽입하고 플러시를 호출한다. |
flush | 출력 스트림이 버퍼링된 문자를 쓰도록 강제함 |
ws | 입력 스트림이 공백을 '먹다'게 하다. |
showpoint | 스트림에서 소수점과 일부 0을 정수로 표시하도록 지시 |
헤더를 사용하여 다른 조작자를 찾을 수 있음iomanip.
비판
포맷 조작자는 마지막에 "재설정"되어야 한다. 그렇지 않으면 프로그래머는 예기치 않게 다음 출력 명세서에서 그들의 효과를 얻을 것이다.
C++ 표준 라이브러리의 일부 구현에는 상당한 양의 데드코드가 있다.예를 들어, GNU libstdc++는 로케일을 구성할 때 자동으로 로케일을 구성한다.ostream프로그램이 로케일에 영향을 미치는 유형(날짜, 시간 또는 돈)을 사용하지 않는 경우에도,[9] 그리고 "Hello, World!" 프로그램을 사용하는 정적으로 연결된 프로그램도 있다.<iostream>GNU libstdc++는 사용하는 동등한 프로그램보다 더 큰 규모의 실행 파일을 생성한다.<cstdio>공간 제약적인 환경을 위해 설계된 C++ 표준 라이브러리의 부분 구현이 존재한다.[10]<iostream>로케일 지원과 같은 그러한 환경의 프로그램에서 필요하지 않을 수 있는 기능은 제외될 수 있다.[11]
명명 규칙
예
정식 "Hello, World!" 프로그램은 다음과 같이 표현할 수 있다.
#include <아이오스트림> 인트로 본래의() { 찌꺼기::뻐드렁니가 나다 << "안녕, 세상!" << 찌꺼기::끝을 맺다; } 이 프로그램은 "Hello, world!"를 출력한 후 뉴라인과 표준 출력 스트림 버퍼 플러시를 실행한다.
다음 예제는 'file'이라는 파일을 만든다.txt'와 함께 '안녕, 세상!'이라는 문구를 삽입한 후 새로운 줄을 그 안에 넣는다.
#include <fstream> 인트로 본래의() { 찌꺼기::중류의 파일("file.txt"); 파일 << "안녕, 세상!" << 찌꺼기::끝을 맺다; } 참조
- ^ ISO/IEC 14882:2003 프로그래밍 언어 – C++. [lib.string.streams]/1
- ^ Stanley B. Lippman, Josee Lajoie (1999). C++ Primer (third ed.). Massachusetts: Addison-Wesley. pp. 1109–1112. ISBN 0-201-82470-1.
- ^ Bjarne Stroustrup (1997). The C++ programming language (third ed.). Addison-Wesley. pp. 637–640. ISBN 0-201-88954-4.
- ^ Stanley B. Lippman, Josee Lajoie (1999). C++ Primer (third ed.). Massachusetts: Addison-Wesley. pp. 1063–1067. ISBN 0-201-82470-1.
- ^ Bjarne Stroustrup. "A History of C++: 1979–1991" (PDF).
- ^ Stanley B. Lippman, Josee Lajoie (1999). C++ Primer (third ed.). Massachusetts: Addison-Wesley. pp. 1112–1120. ISBN 0-201-82470-1.
- ^ "<ios> Visual Studio 2010". Microsoft MSDN: Visual Studio 2010. Retrieved 28 September 2011.
- ^ Holzner, Steven (2001). C++ : Black Book. Scottsdale, Ariz.: Coriolis Group. p. 584. ISBN 1-57610-777-9.
...endl, which flushes the output buffer and sends a newline to the standard output stream.
- ^ GNU libstdc++ 소스 코드,
bits/ios_base.h - ^ C++ 대 C – 핀 8
- ^ "uClibc++ C++ library". Retrieved 6 January 2012.