viewimage.php?id=2ab4c42ef0d0&no=24b0d769e1d32ca73fee84fa11d02831774bc9874fea0c46798ddb3d8b70707df8e7bc6950b1f3bed53d0a2abfc7177b1e461ade0a46134bbc93441763b6f6e694


STL 쓸때 이동생성자, 이동할당자에 noexcept만 붙이면 어지간하면 이동될 줄 알았는데

컨테이너를 생성할 때 브레이스로 초기화를 하면 결국 복사 과정이 끼어들어가네요


Case B, Case C에서 벡터를 브레이스 초기화하므로 initializer_list가 생성되어야 하는데 여기에서 Foo 객체들의 복사를 피할 수가 없네요

initializer_list가 생성된 이후에 이동 생성자가 불리지 않는 이유는 copy elison 때문인 것 같고요


물론 위 예제처럼 Foo 객체가 벡터 밖에서 쓰일 일이 없다면 처음부터

v.emplace_back(0)

이런 식으로 바로 벡터 안에서 생성하는게 explicit constructor 하나만 호출될테니 가장 효율적이겠지만 실험을 위해 배제했어요