2013-07-15 1 views
16

내 친구와 나는 최근 leveldb 소스 코드를 읽었습니다. 그리고 우리는이 문제를 겪습니다.이중 매개 변수 생성자가 명시 적 키워드로 시작하는 이유는 무엇입니까?

explicit SkipList(Comparator cmp, Arena* arena); 

내가 하나의 매개 변수를 명시 적으로 생성자는 생성자 매개 변수에 대한 암시 적 형식 변환을 의미 알고 leveldb db/skiplist.h 파일에서 생성자 선언이있다. 그러나 명시 적 키워드를 가진 이중 매개 변수 생성자는 무엇을 의미합니까? C++ 11의 새로운 규칙입니까?

감사합니다.

+0

정확한 선언입니까? '경기장 '에 기본값이 없습니까? – Gorpik

+2

@ Gorpik 만약 OP가 똑같은 인터페이스를 가지고 있지만 [여기] (http://code.google.com/p/leveldb/source/browse/db/skiplist.h?r=bc1ee4d25e09b04e074db330a41f54ef4af0e31b)를 보면 알 수 없습니다. – TobiMcNamobi

+0

암시 적 캐스트를 피하기 위해 C++ "explicit"키워드가 사용됩니다. – alexbuisson

답변

16

C++ 11에서는 다른 표현식 대신 braced-init-lists을 사용할 수 있습니다. 예를 들어, return 문에서 사용할 수 있습니다.

SkipList foo() { 
    return {{}, nullptr}; //does not compile with explicit constructor 
    return SkipList{{}, nullptr}; //compiles with or without explicit constructor 
} 
+0

균일 초기화로 초기화하는 것은 배열 초기화와 같은 여러 매개 변수를 초기화하는 것을 의미합니까? – lulyon

+0

감사합니다. 매우 도움이됩니다. – lulyon

+1

@lulyon, 통일 초기화는 대개 중괄호 사용으로 발생합니다. 그것들을 사용하여'TypeName()'에 대한 단축형으로 생성자를 호출하고 가장 번거로운 구문 분석을 제거 할 수 있습니다. 실제로 C++ 11의 중요한 기능입니다. 그것에 대한 정보를 찾아야합니다. – chris

관련 문제