Programing

이것은

lottogame 2020. 12. 12. 09:59
반응형

이것은 머리글?


<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

반응형