하면이 경우 "복사"이동 생성자를 사용하여 사용자 정의 타입의 객체 [...] 모든
우선, 이동 생성자에 사용되는 루프 은 복사로 이동한다는 사실을 깨닫습니다. 사실 복사 가능 구조의 클래스도 move-constructible입니다. 그렇다면 왜 명시 적으로 move 생성자를 정의해야합니까?
[...] 루프 카운터로 ++ i 또는 i ++를 사용하면 어떤 차이가 있습니까?
무엇이 i
에 달려 있습니다. int
과 같은 스칼라 객체 인 경우 아무런 차이가 없습니다. i
클래스 타입의 반복자 인 경우 operator ++
의 구현이 반복자의 복사본을하기 전에 반환 할 만들 필요가 없기 때문에
, 다른 한편으로는, ++i
은 (순전히 이론적 인 지상에) 더 효율적한다 반복자 자체가 증가합니다. 당신이 볼 수 있듯이
_Self&
operator++()
{
_M_node = _M_node->_M_next;
return *this;
}
_Self
operator++(int)
{
_Self __tmp = *this;
_M_node = _M_node->_M_next;
return __tmp;
}
는 후위 버전 (하나는 더미 int
을 받아들이는) 더 많은 작업이 있습니다 여기에
, 예를 들어, std::list
의 반복자 유형에 대한 증가 연산자를 정의하는 방법 stdlibC++입니다 해야 할 일 : 원래 반복기의 복사본을 만들어서 재 작성하고 이터레이터의 내부 포인터를 변경 한 다음 복사본을 반환해야합니다.
반면에 접두어 버전은 내부 포인터를 변경하고 자체 참조를 반환해야합니다.
그러나 성능과 관련하여 모든 가정은 측정에 의해 백업되어야한다는 점에 유의하십시오. 이 경우이 두 함수간에 현명한 차이가있을 것으로 기대하지는 않습니다.
Herb Sutter의 [GotW # 2 해결책 : 임시 개체] (http://herbsutter.com/2013/05/13/gotw-2-solution-temporary-objects/)도 참조하십시오. – jww