2013-07-22 3 views
0

:이 코드 조각C++ 함수 선언 구문

: program_(program), max_iters_(max_iterations), num_iters_(0) 

:

생성자 초기화 목록입니다
Search::Search(const string& program, int max_iterations) 
    : program_(program), max_iters_(max_iterations), num_iters_(0) 
{ 
    max_branch_ = 0; 
// ... 
} 
+1

내 대답보기 [C++ 생성자 이름을 따르는 콜론은 무엇을합니까?] (http://stackoverflow.com/a/1272707/96780) –

+0

이 링크 참조 http://stackoverflow.com/questions/9903248/initializing-fields-in-constructor-initializer-list-vs-constructor-body –

+3

궁금한 점이 있지만, 오늘날 C++를 배우는 사람들은 어디입니까? 나는 이것을 설명하지 않은 어떤 소개 텍스트도 상상할 수 없다. –

답변

1

. 추정 가능, Search은 데이터 멤버가 program_, max_itersnum_iters 인 클래스입니다.

+0

tnx. 함수의 본문에서 "max_branch_"를 초기화하고 본문에서 "max_iters_"를 초기화하는 것의 차이점은 무엇입니까? – NewMrd

+0

@NewMrd 생성자 본문에있는 데이터 멤버를 초기화 할 수 * 없습니다 * 값을 할당 할 수 있습니다. 생성자의 본문에 도달하면 모든 데이터 멤버가 초기화됩니다. – juanchopanza

+0

[link] https://github.com/mabdi/CREST/blob/master/src/run_crest/concolic_search.cc 라인을보십시오. 57. – NewMrd

4

당신이 말하는 것을 이니셜 라이저 목록이라고합니다. 클래스 또는 구조체는 생성자에서이 목록을 사용하여 멤버 변수를 초기화 할 수 있습니다.

예 :

struct foo 
{ 
    foo() : member_(0) {} 

    private: 
     int member_; 
}; 

더 기본 생성자가없는 구성원이있는 경우 초기화 목록이 특히 중요하다 - 생성자의 본문에 도달했을 때, 모든 구성원이 만들어진 때문입니다. 이 멤버에 대해 적절한 생성자를 선택하지 않으면 컴파일이 실패합니다.

예 :

struct bar { bar(int) {} }; 

struct foo 
{ 
    foo() 
     : bar_(0) // does not compile without this line 
        // because the compiler will try to default 
        // construct otherwise 
    {} 

    private: 
     bar bar_; 
}; 
0

첫째, 클래스 검색이 매개 변수로 ctor에 전에 선언

함수 선언하지만, 클래스 생성자 구현하지 그리고 지금은 그 구현의 앞에있는 곳 매개 변수는 데이터 멤버를 초기화하는 데 사용됩니다.

+0

나는 질질 끌기는하지만 생성자는 함수이다. 그럼에도 불구하고 12.1의 C++ 11 표준에서 특수 함수로 언급되었지만 함수는 그렇습니다. – user2573221

+0

"num_iters_"가 초기화 목록에서 초기화되었지만 "max_branch_"가 본문에서 초기화 된 이유는 무엇입니까? – NewMrd