이것은 머리글?
<iosfwd>
헤더 는 무엇에 사용됩니까? 왜 필요한가요?
어떤 예?
따라서 #include
크고 복잡하며 컴파일 속도가 느린 iostream 헤더 자체 없이 iostream 유형의 선언에 의존하는 메서드를 자체 헤더에서 선언 할 수 있습니다 .
다음은 간단한 예입니다.
// foo.h
#include <iosfwd>
void sucker(std::iostream& is);
// foo.cc
#include <iostream>
void sucker(std::iostream& is) {
is >> somevar;
}
으로 @Marcelo 칸토는 언급이 전체 정의를 포함하지 않고 iostream 클래스와 함수의 선언을 포함 할 수 있도록, 그것은이다. C와 C ++에서 선언 은 "여기에 무언가의 이름 (함수 / 클래스 / 등)이 있습니다.하지만 그 이름 외에는 더 이상 말하지 않겠습니다."라는 문장입니다. 함수의 경우 이는 함수의 이름을 의미하지만 함수의 코드를 포함하는 본문이 아닙니다. 클래스의 경우 이는 클래스의 이름을 의미하지만 클래스의 멤버 변수 나 메서드는 의미하지 않습니다.
반대로 정의 는 함수 본문, 클래스 멤버 등 전체 정의입니다.
종종 사용할 무언가의 선언 만 필요합니다. 함수의 경우 함수를 호출하기 위해 함수 본문이 어떻게 생겼는지 알 필요가 없습니다 (템플릿 또는 인라인 함수의 경우 제외). 마찬가지로, 클래스를 사용하는 경우 해당 클래스의 인스턴스에 대한 포인터 또는 참조를 전달하는 것이 전부라면 클래스에 어떤 멤버가 있는지 알 필요가 없습니다. 그러나 멤버 변수에 액세스하거나 클래스 메서드를 호출해야하는 즉시 전체 정의가 필요합니다.
정의 대신 선언 만 포함하면 컴파일러가 처리해야하는 코드의 총량이 훨씬 적어 지므로 컴파일이 훨씬 더 빠르게 진행됩니다.
처리중인 코드의 양에 대한 아이디어를 제공하기 위해 다음은 내 로컬 구현에 포함 된 코드의 양입니다.
# The following commands create a source file that includes a single header
# file (on stdout), preprocess it with g++ -E, and then count how many lines
# are in the resulting preprocessed output
$ echo '#include <iosfwd>' | g++ -E -xc++ - | wc
2598 6534 57875
$ echo '#include <iostream>' | g++ -E -xc++ - | wc
25631 59613 631998
를 포함하는 파일 <iosfwd>
은 컴파일러가 다양한 헤더 파일에서 2598 줄의 코드 <iostream>
를 처리해야하는 반면 포함 된 파일 은 무려 25631 줄의 코드를 처리해야합니다. 소스 파일에서 관심있는 실제 코드를 컴파일하기 전입니다!
기본적으로 사용하는 <iosfwd>
것은 컴파일 타임 종속성을 제거하고 싶기 때문입니다.
전체 스트리밍 항목의 정의를 포함하지 않도록 <iosfwd>
기존 스트림 헤더 ( <iostream>
및 친구) 대신 사용 합니다 . <iosfwd>
당신 과 함께 모든 스트리밍 물건을 앞으로 선언하는 것입니다.
이 링크가 특히 유용하다는 것을 알았습니다. http://www.gotw.ca/gotw/007.htm
참고 URL : https://stackoverflow.com/questions/4300696/what-is-the-iosfwd-header
'Programing' 카테고리의 다른 글
함수 정적 변수는 GCC에서 스레드로부터 안전합니까? (0) | 2020.12.13 |
---|---|
MySql Proccesslist가 "Sleep"항목으로 채워져 "너무 많은 연결"이 발생합니까? (0) | 2020.12.13 |
Aptana Studio 3에서 jQuery 지원을 활성화하는 방법 (0) | 2020.12.12 |
상속되는 CSS 속성은 무엇입니까? (0) | 2020.12.12 |
스크롤 이벤트가 너무 많이 발생합니다. (0) | 2020.12.12 |