내가 본 코드 중 std::initializer_list
을 사용하는 대부분의 C++ 11 코드는 가치가 있지만, 때로는 rvalue reference로 가져옵니다. 이 일을할만한 이유가 있습니까?rvalue reference 대 value의 std :: initializer_list를 사용하는 이유는 무엇입니까?
예를 들어, 내가 건너 온 적이 거의 모든 예는 다음을 수행합니다
class A {
public:
A(std::initializer_list<int>);
};
하지만이 가끔 완료보고 계속 :
class B {
public:
B(std::initializer_list<int> &&);
};
나는를 rvalue 참조의 사용과 목적을 이해 일반적으로이지만, std::initializer_list
의 경우 다른 쪽보다 선호되는 이유는 무엇입니까? 내가 생각할 수있는 유일한 점은 class A
이 이니셜 라이저 목록을 별도로 구성 할 수 있으며 class B
이이를 방지한다는 것입니다.
std::initializer_list<int> values {1,2,3,4};
A a(values); // valid
B b(values); // error
그러나 나는 그것을 막는 것이 바람직한 일이 될 수있는 좋은 이유를 생각할 수 없습니다.
그래서 왜 값 대신에 우세 참조로 std::initializer_list
을 가져갈 수 있습니까?
글쎄, 아마도 누군가가 정말로 당신이 목록을 문자 그대로 전달하기를 원할지도 모릅니다. –
좋은 질문입니다. 나 자신을 궁금해하고있었습니다. 그건 그렇고,'B b (std :: move (values));는 여전히 컴파일 될 것입니다. – iavr
어쩌면 어쩌면 의문 스러울 지 모르지만 - 이것을 보았던 곳에서 rvalue 참조 버전을 구현하면 단서가 생깁니 까? – zmb