2012-03-01 2 views
0

다음과 같이내가 다음 줄이 무엇을 이해하려고 노력 중이 야

BStats stats = BStats(); 

구조체가 정의 :

struct BStats 
{ 
    unsigned a; 
    unsigned b; 

    BStats& operator+=(const BStats& rhs) 
    { 
     this->a += rhs.a; 
     this->b += rhs.b; 
     return *this; 
    } 
}; 

하지만 무엇 이것에 대해 아무 생각이 없다 라인 않습니다. 기본 생성자를 호출하고 있습니까?

답변

3
발현 BStats() 5.2.3/2 표준에서 설명

: T 비 배열 간단한 형태 지정자 (7.1.5.2)이다

발현 T() 완전한 객체 유형 또는 (가능하면 CV 공인) void 유형은 값 초기화 된 지정된 유형의 rvalue를 생성합니다. 인

는 표현식 값 초기화 인Bstatsr- 수치의 유형을 생성한다. 특정 경우에 값 초기화BStats 구조체의 두 멤버가 0으로 설정됨을 의미합니다. 기본 생성자는 회원이 0

+1

로 설정되어 있는지 보장하지 않으므로이, 다른 답변에서 언급 한 기본 - 생성자를 호출의 동작과는 다른 경우가

주 @basak는거야 그러나 BStats stats();는 생성자를 호출하지 않고 BStats 형식의 객체조차 선언하지 않고 인수를 취하지 않고 BStats를 반환하는 함수를 선언합니다. .. Google for * most-vexing-parse * –

0

모든 클래스와 마찬가지로 struct에는 컴파일러에서 자동으로 생성 한 기본 생성자가 있습니다. BStats()는 명시 적 호출이 쓸모 없더라도 단순히 기본 생성자를 호출합니다.

0

C++ 클래스와 구조체는 거의 같습니다 (차이점은 C++ 구조체는 클래스가 private 인 기본 특성으로 public 인 클래스입니다). 그래서 생성자를 호출하는 것과 같습니다.

관련 문제