Program Tip

const에 대한 rvalue 참조가 사용됩니까?

programtip 2020. 10. 30. 20:29
반응형

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

반응형