유명한 std::swap 투스텝 있잖아 ADL 이용해 적합한 네임페이스의 swap 골라주는거
그런데 c++11부터는 std::swap이 무브시맨틱을 기본으로 하기 때문에 이동생성자와 이동대입연산자만 잘 정의해두면 바로 std::swap쓰면 된다고 알고 있음
그런데 얼마전에 c++20에서는 std::ranges::swap이라는 cpo가 들어왔다고 들음
cpo 자체는 잘 모르는데 결국 룩업 관련한 오브젝트 같은데...
암튼 std::ranges::swap 동작 자체는 c++11의 std::swap이랑 같아보이더라
그래서 궁금한건 c++20 기준으로 하위호환 고려 안하면 어떻게 쓰는게 베스트 프락티스임?
하위호환 버려도되면 러스트 쓰는게 나음
std::ranges::swap은 - dc App
1.swap 오버로딩이 있거나 복사가 가능하면 기존 방식과 똑같이 동작하고 - dc App
2.view에 대해 할 경우에는 view를 swap하고 - dc App
3.이동 가능할 때는 이동하는 방식으로 동작함 - dc App
https://stackoverflow.com/questions/68516546/whats-the-difference-between-stdrangesswap-and-stdswap
참고 - dc App
오 고맙 view 개념 배제된 상황에서는 크게 다를게 없어보이네 일단 c++20 ranges 관련된거부터 공부해야 제대로 이해할수 있겠네
https://sorting.tistory.com/m/22
- dc App
이 글이 도움이 될 것임 - dc App
view 아니어도 오버로딩 찾아내는 과정이 다르잖아 std::swap은 투스텝 안쓰면 무조건 무브시맨틱 적용하고, std::ranges::swap은 투스텝 쓴 std::swap 마냥 다른 swap 적용가능한거를 찾고
좀 생략됐음 - dc App
내가 말하는 건 오버로딩 우선이라는 것 - dc App