Por favor, ¿podría alguien explicar en inglés sencillo qué significa "extender la semántica de movimiento a * esto"? I am referring to this proposal. Todo lo que estoy buscando es lo que es & por qué lo necesitamos. Tenga en cuenta que entiendo qué es una referencia de valor en general, sobre qué semántica de movimiento se construye. ¡No soy capaz de entender qué tal extensión agrega a las referencias de valor!¿De qué se trata la semántica de movimientos extendidos a * esto?
Respuesta
La función de calificación ref (que indica el tipo de *this
) le permite distinguir si se puede invocar una función miembro en rvalues o lvalues (o ambos), y sobrecargar funciones basadas en eso. El first version da cierta razón de ser en la parte informal:
Prevenir sorprende:
struct S { S* operator &() &; // Selected for lvalues only S& operator=(S const&) &; // Selected for lvalues only }; int main() { S* p = &S(); // Error! S() = S(); // Error! }
Habilitar la semántica movimiento:
class X { std::vector<char> data_; public: // ... std::vector<char> const & data() const & { return data_; } std::vector<char> && data() && { return data_; } //should probably be std::move(data_) }; X f(); // ... X x; std::vector<char> a = x.data(); // copy std::vector<char> b = f().data(); // move
Por ejemplo, se puede sobrecargar los operadores como funciones libres con referencias rvalue si lo desea:
Foo operator+(Foo&& a, const Foo& b)
{
a += b;
return std::move(a);
}
para lograr el mismo efecto con una función miembro, que necesita la propuesta citada:
Foo Foo::operator+(const Foo& b) && // note the double ampersand
{
*this += b;
return *this;
}
El doble ampersand dice "esta función de miembro solo puede invocarse en valores r".
Si debe o no mudarse explícitamente desde *this
en dicha función miembro se discute here.
Gracias por la respuesta :) Gracias – AraK
- 1. Semántica de movimiento: ¿de qué se trata?
- 2. PyPy: ¿De qué se trata todo esto?
- 3. ¿De qué se trata _GLIBCXX_USE_NANOSLEEP?
- 4. ¿de qué se trata la serialización?
- 5. MethodHandle: ¿de qué se trata?
- 6. Reenvío perfecto: ¿de qué se trata?
- 7. Web-Service: JAX-WS, CXF, WSDL ... ¿De qué se trata todo esto?
- 8. ¿De qué se trata @synthesize foo = _foo?
- 9. d2: ¿Qué son la semántica de opDot?
- 10. ¿Qué significa "semántica de valor" y "semántica de puntero"?
- 11. PSGI: ¿Qué es y de qué se trata?
- 12. ¿Por qué no se decodificará esto a la entidad html?
- 13. ¿A qué tipo de arquitectura se llama esto?
- 14. Restricciones de movimientos de UIGestureRecognizer
- 15. MATLAB: se trata de java.lang.String
- 16. ¿Qué es "semántica formal"?
- 17. Mostrar caracteres ASCII extendidos
- 18. la semántica de JavaScript
- 19. ¿Esto es un error en cómo jQuery trata a los selectores de niños?
- 20. ¿Qué significa esto? (int &) a
- 21. Subversion: se trata de la generación de código
- 22. ¿De qué se trata la aopalliance? ¿Y por qué lo usa Guice?
- 23. En términos de programación, ¿qué significa semántica?
- 24. Anima los movimientos de la ventana desde la bandeja
- 25. C++ Mover semántica y excepciones
- 26. En CouchDB muestra, ¿a qué se refiere "esto"?
- 27. ¿Qué Triplestore para el desarrollo rápido de la web semántica?
- 28. rubí azúcar sintáctico: se trata de Nils
- 29. CLLocationManager Simulator para simular movimientos de automóvil?
- 30. ¿Por qué REPL trata a clojure.core/doc como una var?
. Buena respuesta. – AraK