문제

VC++는 클래스 선언 인라인 함수 내에서 구현되는 함수를 만듭니다.

클래스를 선언하면 Foo 다음과 같이 CONSTRUCTOR 및 DESTRUCTOR 인라인 함수는 무엇입니까?

class Foo 
{
    int* p;
public:
    Foo() { p = new char[0x00100000]; }
    ~Foo() { delete [] p; }
};

{
    Foo f;
    (f);
}
도움이 되었습니까?

해결책

클래스 내부에서 생성자의 본문을 정의하는 것은 "inline" 키워드를 사용하여 클래스 외부에 함수를 배치하는 것과 동일한 효과를 갖습니다.

두 경우 모두 컴파일러에 대한 힌트입니다."인라인" 함수가 반드시 함수가 인라인된다는 의미는 아닙니다.이는 기능의 복잡성과 기타 규칙에 따라 다릅니다.

다른 팁

짧은 대답은 '예'입니다.모든 함수는 인라인으로 선언될 수 있으며 함수 본문을 클래스 정의에 넣는 것이 이를 수행하는 한 가지 방법입니다.다음을 수행할 수도 있습니다.

class Foo 
{
    int* p;
public:
    Foo();
    ~Foo();
};

inline Foo::Foo() 
{ 
    p = new char[0x00100000]; 
}

inline Foo::~Foo()
{ 
    delete [] p; 
}

그러나 실제로 함수를 인라인하는지는 컴파일러에 달려 있습니다.VC++는 인라인 요청을 거의 무시합니다.좋은 생각이라고 생각되는 경우에만 함수를 인라인합니다.최신 버전의 컴파일러는 별도의 .obj 파일에 있고 인라인으로 선언되지 않은 항목도 인라인합니다(예:다른 .cpp 파일의 코드에서) 링크 타임코드 생성.

당신은 __forceinline "이 함수를 인라인하세요"라고 말할 때 정말 의미하는 바라고 컴파일러에게 알려주는 키워드이지만 일반적으로 그럴 가치가 없습니다.많은 경우 실제로 컴파일러가 가장 잘 알고 있습니다.

inline 키워드로 함수를 표시하는 것과 동일하게 클래스 본문에 함수 정의를 넣습니다.이는 함수가 컴파일러에 의해 인라인될 수도 있고 그렇지 않을 수도 있음을 의미합니다.그렇다면 가장 좋은 대답은 "아마도"가 아닐까 싶습니다.

다른 기능을 인라인으로 만들 수 있는 만큼 그렇습니다.

인라인 여부는 대부분 컴파일러에 의해 결정됩니다.코드의 인라인은 컴파일러에 대한 힌트만 제공합니다.
믿을 수 있는 한 가지 규칙은 가상 함수가 인라인되지 않는다는 것입니다.기본 클래스에 가상 생성자/소멸자가 있으면 아마도 인라인되지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top