Supongo que no, pero me gustaría confirmarlo. ¿Hay algún uso para const Foo&&
, donde Foo
es un tipo de clase?¿Las referencias de valor a const tienen algún uso?
Respuesta
Ocasionalmente son útiles. El proyecto de C++ 0x sí los utiliza en algunos lugares, por ejemplo:
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
Los dos sobrecargas superiores a asegurar que las demás ref(T&)
y cref(const T&)
funciones no se unen a rvalues (que de otro modo sería posible).
actualización
he acaba de comprobar la norma oficial N3290, que por desgracia no está disponible al público, y tiene en objetos 20.8 Función [function.objects]/p2:
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
Luego revisé el borrador más reciente posterior a C++ 11, que está disponible públicamente, N3485, y en 20.8 Objetos de función [función.objetos]/p2 aún dice:
template <class T> void ref(const T&&) = delete;
template <class T> void cref(const T&&) = delete;
Al mirar [cppreference] (http://en.cppreference.com/w/cpp/utility/functional/ref) parece que ya no es el caso. ¿Alguna idea de por qué? ¿Se usa cualquier otro lugar 'const T &&'? – Pubby
En realidad, cppreference podría no mostrar las funciones eliminadas. No he comprobado el estándar. – Pubby
@Pubby cppreference ciertamente muestra las funciones eliminadas, esas fueron omitidas por error. – Cubbi
Son permitidas e incluso las funciones clasificadas basadas en const
, pero como no se puede mover desde el objeto const referido por const Foo&&
, no son útiles.
¿Qué quiere decir exactamente con el comentario "clasificado"? ¿Algo relacionado con la resolución de sobrecarga, supongo? – fredoverflow
¿Por qué no se podía mover de una const rvalue-ref, si el tipo dado tiene un cursor de movimiento que toma una const rvalue-ref? –
@FredOverflow, el ranking de sobrecarga es el siguiente: 'const T &, T &, const T &&, T &&' –
No puedo pensar en una situación en la que esto sería útil directamente, sino que podrían ser utilizados indirectamente:
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);
}
La T en g es T constante, así f 'SX es una T const & &.
Es probable que esto se traduce en un error de comilla en f (cuando se trata de mover o usar el objeto), pero f podría tener un valor p-ref modo que no se puede llamar en lvalues, sin modificar el valor r (como en el ejemplo demasiado simple anterior).
- 1. Inicialización literal para referencias const
- 2. ¿Alguien puede explicar las referencias de valor r con respecto a las excepciones?
- 3. Métodos Const que Volver Referencias
- 4. ¿Las clases de elementos HTML tienen prefijos según su uso?
- 5. ¿Las etiquetas fieldset tienen algún beneficio de accesibilidad?
- 6. Referencias de Const en std :: elementos vectoriales
- 7. Lista/Recolección de referencias a las propiedades
- 8. ¿Cuáles son las "consecuencias prácticas" del uso de referencias suaves?
- 9. Uso de referencias en MySQL
- 10. return por el valor asignado a la referencia de const
- 11. ¿Es "const LPVOID" equivalente a "void * const"?
- 12. ¿Las propiedades siempre tienen un valor cuando están desactivadas?
- 13. Uso Parcelable con referencias circulares
- 14. Resalta todas las referencias a X?
- 15. C99 const pasar por valor
- 16. bloques anidados y las referencias a la libre
- 17. tienen el uso de bundler http: en lugar de git :?
- 18. ¿Las referencias rvalue permiten referencias colgantes?
- 19. Algunas aclaraciones sobre las referencias rvalue
- 20. valor de inicialización de un miembro const refiero
- 21. ¿Es una mala práctica alterar las matrices dinámicas que tienen referencias sobre ellas?
- 22. ¿El uso de ViewModels y las referencias a System.Web.Mvc violan el patrón MVC?
- 23. Oracle todas las referencias de clave externa
- 24. Pasando temporarios como referencias no-const en C++
- 25. cambiando el valor const en C
- 26. El uso de const en un método
- 27. ¿Cómo creó Microsoft ensamblajes que tienen referencias circulares?
- 28. ¿Cómo reemplazo las referencias débiles cuando uso ARC y apunte a iOS 4.0?
- 29. ¿Buenas referencias para el uso de ARIA?
- 30. ¿Cómo uso Powershell para agregar/eliminar referencias a un csproj?
En este video, STL dice 'const &&' son muy importantes, aunque no dice por qué: https://www.youtube.com/watch?v=JhgWFYfdIho#t=54m20s –