std::initializer_list
핵심 언어가 내장되어 있지 않은 이유는 무엇 입니까?
C ++ 11의 매우 중요한 기능이지만 자체 예약 된 키워드 (또는 유사)가없는 것 같습니다.
대신, initializer_list
그건 단지 특별한 암시가 표준 라이브러리에서 템플릿 클래스 매핑 새로운에서 보강-초기화리스트 {...}
컴파일러에 의해 처리하는 것 구문을.
처음에이 솔루션은 상당히 엉망 입니다.
이것이 C ++ 언어에 대한 새로운 추가가 이제 구현되는 방식 입니까? 핵심 언어가 아닌 일부 템플릿 클래스의 암시 적 역할 에 의해 구현 됩니까?
다음 예를 고려하십시오.
widget<int> w = {1,2,3}; //this is how we want to use a class
새로운 클래스가 선택되는 이유 :
widget( std::initializer_list<T> init )
다음 아이디어 와 유사한 것을 사용하는 대신 :
widget( T[] init, int length ) // (1)
widget( T... init ) // (2)
widget( std::vector<T> init ) // (3)
const
여기저기서 추가 할 수 있습니다.- 언어에 이미 세 개의 점이 존재합니다 (var-args, 이제 가변 템플릿), 구문을 재사용하지 않는 이유 (그리고 내장 된 것처럼 느끼게 함 )
- 기존 컨테이너 만 추가
const
하고&
그들 모두는 이미 언어의 일부입니다. 나는 첫 번째 아이디어를 세 개만 썼고 다른 많은 접근 방식 이 있다고 확신합니다 .