const에 대한 rvalue 참조가 사용됩니까?
아닐 것 같지만 확인하고 싶습니다. 클래스 유형은 const Foo&&
어디에 사용 Foo
됩니까?
때때로 유용합니다. 초안 C ++ 0x 자체는 다음과 같이 몇 군데에서이를 사용합니다.
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
위의 두 오버로드는 다른 함수 ref(T&)
와 cref(const T&)
함수가 rvalue에 바인딩되지 않도록합니다 (그렇지 않으면 가능함).
최신 정보
아쉽게도 공개적으로 사용할 수없는 공식 표준 N3290을 확인 했으며 20.8 Function 객체 [function.objects] / p2에 있습니다.
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
그런 다음 공개적으로 사용 가능한 최신 C ++ 11 이후 초안 인 N3485 를 확인했으며 20.8 함수 객체 [function.objects] / p2에서 여전히 다음과 같이 말합니다.
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
그것들은 허용되고 심지어 함수는를 기준으로 순위가 매겨 const
지지만에서 참조하는 const 객체에서 이동할 수 없기 const Foo&&
때문에 유용하지 않습니다.
이것이 직접적으로 유용 할 것이라고 생각할 수는 없지만 간접적으로 사용될 수 있습니다.
template<class T>
void f(T const &x) {
cout << "lvalue";
}
template<class T>
void f(T &&x) {
cout << "rvalue";
}
template<class T>
void g(T &x) {
f(T());
}
template<class T>
void h(T const &x) {
g(x);
}
g 의 T 는 T const이므로 f 's x는 T const &&입니다.
이로 인해 f (객체를 이동하거나 사용하려고 할 때) 에서 comile 오류가 발생할 가능성이 있지만 f 는 rvalue-ref를 가져 와서 rvalue를 수정하지 않고 lvalue에서 호출 할 수 없도록 할 수 있습니다 (너무 단순한 위의 예).
std :: ref 외에도 표준 라이브러리는 동일한 목적으로 std :: as_const의 const rvalue 참조를 사용합니다 .
template <class T>
void as_const(const T&&) = delete;
또한 래핑 된 값을 가져올 때 std :: optional 에서 반환 값으로 사용됩니다 .
constexpr const T&& operator*() const&&;
constexpr const T&& value() const &&;
뿐만 아니라 std :: get :
template <class T, class... Types>
constexpr const T&& get(const std::variant<Types...>&& v);
template< class T, class... Types >
constexpr const T&& get(const tuple<Types...>&& t) noexcept;
이는 아마도 래핑 된 값에 액세스 할 때 래퍼의 일관성뿐 아니라 값 범주를 유지하기위한 것입니다.
이것은 const rvalue ref-qualified 함수가 래핑 된 객체에서 호출 될 수 있는지 여부에 차이를 만듭니다. 즉, const rvalue ref 한정 함수의 용도를 알지 못합니다.
참고 URL : https://stackoverflow.com/questions/4938875/do-rvalue-references-to-const-have-any-use
'Program Tip' 카테고리의 다른 글
Rust의 옵션 유형의 오버 헤드는 무엇입니까? (0) | 2020.10.30 |
---|---|
함수를 다시 시작하기 전에 JavaScript Promise가 해결되기를 기다리는 방법은 무엇입니까? (0) | 2020.10.30 |
지도가 Python 3에서 목록 대신지도 객체를 반환하는 이유는 무엇입니까? (0) | 2020.10.30 |
log4j가 자체 구성에 사용한 파일을 표시하도록 할 수 있습니까? (0) | 2020.10.30 |
REST (RESTful) API를 통한 대량 수집 조작 (0) | 2020.10.30 |