c++ - Uso correcto de la clase Eigen:: Ref<>
parameters pass-by-reference (1)
En general, usar una referencia no constante como Ref<T>&
nunca es una buena idea porque esto solo funcionará si la persona que llama ya tiene un objeto Ref<T>
disponible. Esto descarta 5 y 7.
Los casos 3 y 4 no tienen sentido, y no se compilarán en general.
Entonces, no hay mucha diferencia entre una const Ref<const T>
y una const Ref<const T>&
porque es poco probable que la función se llame con un objeto Ref<const T>
, por lo que una Ref<const T>
Tendrá que ser creado en la mayoría de los casos de todos modos. Sin embargo, todavía podríamos recomendar 1 sobre 2 o 6.
Entonces, en resumen, podríamos recomendar Ref<T>
para una referencia de escritura, y const Ref<const T>&
para una referencia de const.
La opción 6, Ref<const T>
, aún puede ser interesante si desea cambiar la matriz a la que se hace referencia (no su contenido) a través de una llamada al constructor Ref
usando una ubicación nueva .
Eigen ha introducido la clase Ref <> para escribir funciones con objetos Eigen como parámetros sin el uso de temporarios innecesarios, cuando no se desea escribir funciones de plantilla. Uno puede leer sobre esto here .
Al buscar en Internet, encontré varias declaraciones diferentes de parámetros usando la clase Ref <>. En la documentación de Eigen, utilizan const Eigen::Ref<const Eigen::MatrixXf>&
para un parámetro de solo lectura en el primer ejemplo. En el segundo ejemplo, Eigen::Ref<Eigen::MatrixXd>
se introduce para los parámetros de lectura y escritura, PERO aquí const Eigen::Ref<const Eigen::MatrixXd>
se usa para los parámetros de solo lectura (sin referencia). Así que mi pregunta es:
¿Cuál es la diferencia entre las siguientes declaraciones y cuándo uso cuál? `
-
const Eigen::Ref<const Eigen::MatrixXd>&
-
const Eigen::Ref<const Eigen::MatrixXd>
-
const Eigen::Ref<Eigen::MatrixXd>&
-
const Eigen::Ref<Eigen::MatrixXd>
-
Eigen::Ref<const Eigen::MatrixXd>&
-
Eigen::Ref<const Eigen::MatrixXd>
-
Eigen::Ref<Eigen::MatrixXd>&
-
Eigen::Ref<Eigen::MatrixXd>
Para completar, enumeré todas las combinaciones posibles de uso de const y la referencia.