우리가 말하는 과부하에 따라 [unord.map.elem]std::unordered_map::operator[] 과 같습니다 .
T& operator[](const key_type& k)
{
return try_emplace(k).first->second;
}
(AN r- 수치 참조 복용 과부하는 이동 k에 try_emplace달리 동일)
k지도의 키 아래에 요소가 있으면 try_emplace반복자를 해당 요소와 로 반환합니다 false. 그렇지 않으면 try_emplacekey 아래에 새 요소를 삽입하고 kiterator와 true [unord.map.modifiers]에 반복자를 리턴합니다 .
template <class... Args>
pair<iterator, bool> try_emplace(const key_type& k, Args&&... args);
우리에게 흥미있는 것은 아직 요소가없는 경우이다 [unord.map.modifiers] / 6 :
그렇지 않으면 다음으로 value_type구성된 유형의 객체를 삽입합니다.piecewise_construct, forward_as_tuple(k), forward_as_tuple(std::forward<Args>(args)...)
(AN r- 수치 참조 복용 과부하는 이동 k에 forward_as_tuple다시 달리 동일하며)
이후 value_typeA는 pair<const Key, T> [unord.map.overview / 2 ,이 새로운지도 요소는 다음과 같이 구성 할 것을 우리에게 알려줍니다 :
pair<const Key, T>(piecewise_construct, forward_as_tuple(k), forward_as_tuple(std::forward<Args>(args)...));
이후 args에서 나오는 경우 비어 operator[],이 새로운 값은 상기의 구성원으로 구성되는 귀결 pair인수로부터 [pairs.pair] / 14 직접 초기화이다 [class.base.init] / 7 종류의 값의 T이용은 ()이니셜 라이저로서 값 초기화 [dcl.init] /17.4로 요약 됩니다. 의 값 초기화 int는 0 초기화 [dcl.init] / 8 입니다. 그리고 int자연스럽게 int0 으로 초기화 하면 자연스럽게 0 [dcl.init] / 6 으로 초기화 됩니다.
예, 코드는 0을 반환합니다.