({1, 2, 3})
양식은 vector<int>
의 생성자를 직접 호출하고 첫 번째 인수로 {1, 2, 3}
을 전달합니다. vector<int>
이 그 첫 번째 매개 변수 initializer_list
또는 {1, 2, 3}
(같은, 다른 컨테이너 클래스)에 의해 초기화 될 수있는 또 다른 유형의, 그것이 작동하지 않을 것입니다 생성자를하지 않았을 경우, 당신은 이상의 인수
vector<int> vk({1, 2, 3}, myAllocator);
을 통과 할 수 있었다. 실제로는 vector<int>
의 첫 번째 매개 변수가 initializer_list<int>
인 생성자가 있기 때문에 작동합니다. 이것은 당신이 괄호를 생략하면 정상적인 기능에,
void f(vector<int> const& vk);
int main() { f({1, 2, 3}); }
를 호출 vector<int> vk{1, 2, 3}
같이 정확한 의미는 클래스에 따라 달라집니다처럼입니다. vector<int>
에는 초기화 자 목록 생성자가 있습니다.이 생성자는 첫 번째 매개 변수가 initializer_list<int>
(선택적으로 참조)이고 기본 매개 변수가있는 다른 모든 매개 변수가있는 생성자입니다. 클래스에 그러한 생성자가있는 경우 이니셜 라이저 목록이 해당 생성자에 전달됩니다. 또는 클래스는 단순히 집계 일 수도 있습니다 (예 : struct A { int a; int b; int c; };
, 이니셜 라이저 목록에서 멤버 초기화). 3
int
인수를 허용하는 생성자가 있어야합니다. 그것은 명시 적으로 생성자를 사용하는 것을 금지하는 것을 제외
가 마지막으로 = { 1, 2, 3 }
형태, 버전 (즉, 단지 =
제거) 괄호를 생략 거의 동일합니다 (즉, 그들은 explicit vector(initializer_list<int>);
로 선언했다거나, 그것은 것 대신 explicit vector(int, int, int);
을 선언했다 = { 1, 2, 3 }
을 사용하면 오류가 발생합니다.
순수한 균일 초기화는 형태도있다 :'표준 : : 벡터 VK {1, 2, 3} ; ' –
나에게 이해가 가지 않는다. '벡터 vk {2}'에서 이니셜 라이저 목록도 사용합니다. –