es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Se supone que std::ranges::size debe devolver un entero sin signo?

Aquí se indica que std::ranges::size debería devolver un entero sin signo. Sin embargo, cuando lo utilizo en un vector de Eigen (con Eigen 3.4), lo siguiente se compila:

Eigen::VectorXd x;
static_assert(std::same_as<eigen::vectorxd::index, decltype(std::ranges::size(x))="">);

donde Eigen::VectorXd::Index es notoriamente un entero con signo. Al observar la implementación de std::ranges::size, noté que el tipo de retorno se infiere del tipo de retorno de x.size(), que es precisamente Eigen::VectorXd::Index. ¿Es esto un error de std::ranges::size? ¿O es esto lo esperado?


Actualización 27/12/2021

La página de referencia de C++ vinculada anteriormente ha cambiado finalmente la descripción de la función std::ranges::size: ¡solo devuelve un entero, no necesariamente sin signo!</eigen::vectorxd::index,>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Según la página de referencia de C++ “>1, std::ranges::size debería devolver un entero sin signo. Sin embargo, cuando se utiliza en un vector Eigen con Eigen 3.4, la afirmación std::same_as<eigen::vectorxd::index, decltype(std::ranges::size(x))=""> se cumple, a pesar de que Eigen::VectorXd::Index es un entero con signo.

    Este comportamiento es esperado y no es un error. El tipo de retorno de std::ranges::size se infiere a partir del tipo de retorno de x.size(), que a su vez devuelve Eigen::VectorXd::Index. Por lo tanto, ya que Eigen::VectorXd::Index cumple con los requisitos conceptuales de std::sized_range, es un tipo de retorno válido para std::ranges::size.

    Cabe señalar que la página de referencia de C++ ha sido actualizada para indicar que std::ranges::size devuelve un entero, no necesariamente uno sin signo.

Comments are closed.