2016-06-30 18 views
1

이 코드가 내부적으로 어떻게 작동하는지 나는 C++ 11의 새로운 그리고 난 궁금 해서요 :표준 : 생성자에서 initializer_list 변환

class MyClass 
{ 
    public: 
     MyClass(int a, double b) { 
      cout << "ctor()" << endl; 
     } 
}; 

int main() 
{ 
    MyClass i1{4, 7}; 
    return 0; 
} 

새로운 초기화 목록의 나의 이해는 클래스 std::initializer_list 점이다 코드에서 특수 구문 { .... }으로 생성되었습니다. 그렇다면 {4, 7}에 의해 생성 된이 클래스 인스턴스는 내부적으로 생성자에 맞는 양식으로 변환되어 MyClass이됩니까? 감사.

+0

구문'{... }} *'std :: initializer_list'를 만들 수 있습니다. 아니면 다른 일을 할 수 있습니다. – immibis

+0

@immibis 읽을 수있는 좋은 참조가 있습니까? – hovo

+1

"Effective Modern C++"의 항목 6을 참조하십시오. – Mine

답변

1

이렇게 생각합니다. 에서 추출 : 이전 단계에서 일치를 생성하지 않는 경우 Explanation of list initialization at cppreference.com

, T의 모든 생성자는 제한, 브레이스 - 초기화 목록의 요소로 구성 인자의 집합에 대해 오버로드 확인에 참여하는 좁히지 않는 전환 만 허용됩니다. 이 단계에서 복사 목록 초기화에 가장 적합한 일치 항목으로 명시 적 생성자가 생성되면 컴파일이 실패합니다 (단순 복사 초기화에서 명시 적 생성자는 전혀 고려되지 않습니다.)