2009-11-23 1 views
2

, 나는 클래스 것이 있다고, 그 유형의 const 멤버, 같은 포함하도록 싶습니다C++에서 클래스의 (멤버로서) 컴파일 타임 상수 인스턴스를 가질 수 있습니까? C++에서

class Thing 
{ 
    public: 
     Thing(); 
    private: 
     static const Thing THING; 
}; 

을하지만이 위와 같이 작동합니다 생각하지 않습니다. 어떻게해야합니까?

+1

시도해 보셨습니까? 그게 왜 효과가 없어야하는지 모르겠다. 싱글 톤을 구현하려고하면 더 좋은 방법이 있습니다. – Sebastian

+0

인스턴스를 인스턴스화해야한다는 것을 이해하지 못했습니다. 위와 같은 선언이 충분하다고 생각했습니다. (기본 생성자를 사용할 것입니다.) – Tarquila

답변

3

다음 작은 프로그램 컴파일 및 GCC 3.4.5 (는 MinGW)를 사용하여 링크 :

class Thing 
{ 
public: 
    Thing(); 
private: 
    static const Thing THING; 
}; 

Thing::Thing() 
{} 

// We must instantiate the static variable somewhere, like inside 'Thing.cpp' 
const Thing Thing::THING = Thing(); 

int main(int argc, char* argv[]) 
{ 
    return 0; 
} 
0

표준이 무엇에 관해서 말하는지 확실하지 않지만 왜 작동하지 않아야하는지 알 수 없습니다. 그것은 내 gcc에 잘 컴파일합니다. 클래스 선언 외부에서 정적 객체를 인스턴스화하는 것을 기억 했습니까?

+0

아니요, 그렇게하지 않았습니다. 나는 선언이 기본 생성자로 인스턴스화한다는 것을 의미한다고 생각했다. 감사. – Tarquila

0

번호 당신은 할 수 없습니다.
S.C.Madsen과 int3이 이미 게시되었으므로 cpp 파일에서 제대로 정의되고 초기화되는 한 모든 유형의 클래스 범위에서 static const를 선언 할 수 있지만 컴파일 시간 상수는 될 수 없습니다.
컴파일 시간 상수는 템플릿 인수와 배열 크기로 기본 제공되는 상수입니다. 이러한 상수는 런타임 상수보다 더 최적화 될 수도 있습니다. 현재, AFAIK는 내장 된 숫자 형만 컴파일 타임 상수로 사용할 수 있습니다.
이유는 BTW입니다.이 상수는 컴파일 타임에 평가되어야합니다 (리터럴과 비슷 함).

관련 문제