c++ - ¿Qué es "rvalue reference for * this"?


1 Answers

Hay un caso de uso adicional para el formulario de calificador ref del calificador. C ++ 98 tiene un lenguaje que permite llamar a funciones miembro no const para instancias de clase que son valores. Esto conduce a todo tipo de rarezas que van en contra del concepto mismo de rvalidad y se desvía de cómo funcionan los tipos integrados:

struct S {
  S& operator ++(); 
  S* operator &(); 
};
S() = S();      // rvalue as a left-hand-side of assignment!
S& foo = ++S(); // oops, dangling reference
&S();           // taking address of rvalue...

Los ref-calificadores de Lvalue resuelven estos problemas:

struct S {
  S& operator ++() &;
  S* operator &() &;
  const S& operator =(const S&) &;
};

Ahora los operadores funcionan como los de los tipos incorporados, aceptando solo valores de l.

c++ c++11 move-semantics c++-faq qualifiers

Encontré una propuesta llamada "rvalue reference for * this" en la página de estado de C ++ 11 de Clang.

He leído bastante acerca de las referencias de valores y las he entendido, pero no creo que sepa esto. Tampoco pude encontrar muchos recursos en la web usando los términos.

Hay un enlace al documento de propuesta en la página: N2439 (Extender la semántica de movimiento a * esto), pero tampoco recibo muchos ejemplos de eso.

¿De qué se trata esta característica?



Related