우리가 말하는 과부하에 따라 [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_emplace
key 아래에 새 요소를 삽입하고 k
iterator와 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_type
A는 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
자연스럽게 int
0 으로 초기화 하면 자연스럽게 0 [dcl.init] / 6 으로 초기화 됩니다.
예, 코드는 0을 반환합니다.