2013-04-19 2 views
1

저는 초보자이며 객체 생성과 생성자 사이의 관계에 대해 근본적인 의심을 가지고 있습니다. 1클래스의 참조 변수 초기화에 오류가 없습니다.

#include<iostream> 
using namespace std; 
class xxx{ 
    private: int x; 
    public: xxx(){cout<<"constructer is called"<<endl;} 
}; 
int main(int argc, char *argv[]) 
{ 
    xxx x1;  //Constructor is called 
    return 0; 
} 

출력 - 생성자가 호출 프로그램 -

프로그램 - 2

#include<iostream> 
using namespace std; 
class xxx{ 
    private: int x; 
    public: xxx(){cout<<"constructer is called"<<endl;} 
}; 
int main(int argc, char *argv[]) 
{ 
    xxx x1();  //Constructor xxx() is not called. 
    return 0; 
} 

출력 - 빈,상관 정보가 매우 helpfule이다

+0

언급되지 않았으므로 [Most Vexing Parse] (http://en.wikipedia.org/wiki/Most_vexing_parse)라고합니다. –

+0

@CaptainObvlious - 가장 까다로운 구문 분석은 아닙니다. 그것은 단순히 함수 선언입니다. –

답변

2
xxx x1; 

클래스 xxx의 객체를 생성하고, 따라서 클래스 xxx의 기본 생성자를 호출합니다.

xxx x1(); 

클래스 xxx의 객체를 반환하고 함수 이름이 x1, 아니 매개 변수를 사용하지 않는 기능을 선언합니다. 따라서 클래스 xxx의 인스턴스가 아니므로 호출되는 생성자가 없습니다.

4

이 :

xxx x1(); 

더 따라서 (x1 인수없이 복용하지와 xxx 복귀라는 함수) 함수 선언 안 xxx의 어떤 인스턴스가 생성되지 않는 변수 선언 (인 생성자 호출).

관련 문제