sirven que punteros puntero para operaciones los ejemplos ejemplo dev declaracion con aritmetica apuntadores c++ arrays templates pointers pass-by-reference

que - punteros c++



Obtener un puntero al final de una matriz (3)

El único problema que veo es que si alguna vez no conoce la longitud en el momento de la compilación, su plantilla no sabrá qué poner ahí. Entonces, tendría que decir test+x o algo de todos modos, y ahora tiene dos formas diferentes de hacer lo mismo.

Personalmente prefiero usar un vector<int> y tener end() ya definido para mí. Si alguna vez necesita la matriz, está disponible como &v[0] .

Uso la siguiente plantilla para obtener un apuntador después del último elemento de una matriz:

template <typename T, size_t n> T* end_of(T (&array)[n]) { return array + n; }

Ahora parece recordar que hubo algún problema con este enfoque, pero no recuerdo qué era. Creo que tenía algo que ver con la elección de los parámetros de tipo o los parámetros de función, pero no estoy seguro. Entonces, como un control de cordura, ¿ve algún problema con el código anterior? Pequeña prueba de uso:

int test[] = {11, 19, 5, 17, 7, 3, 13, 2}; std::sort(test, end_of(test));


Necesitas una versión const también. Sin embargo, hasta donde yo sé, no hay problemas reales con ese enfoque; lo veo comúnmente usado.


Su propuesta no es necesariamente evaluada en tiempo de compilación, depende de la optimización. Lo siguiente se calcula en tiempo de compilación:

template <typename T, size_t N> char (&array(T(&)[N]))[N]; int main() { int myArray[10]; std::cout << sizeof array(myArray) << std::endl; return 0; }

Funciona creando un tipo de matriz de char que tiene el mismo número de elementos que la matriz dada. sizeof siempre devuelve el tamaño en número de caracteres.