while saber rango programacion programa principiantes para numeros mayor limitar hacer ejercicios ejemplos edad condicionales como ciclos ats c++ c++11 stl iterator object-layout

c++ - saber - ¿Los miembros de datos forman un rango?



programa en c++ para saber si es mayor de edad (5)

En general, es una mala idea. Si desea tratar algunas variables como una matriz, debe declararlas como una matriz :)

Sin embargo, puede usar algunas instrucciones específicas del compilador para asegurarse de que no haya relleno entre los elementos, fi:

#pragma pack(push, 1) struct X { int a, b, c, d, e; }; #pragma pack(pop)

o

struct __attribute__((__packed__)) X { int a, b, c, d, e; };

¿Puedo tratar miembros de datos consecutivos del mismo tipo que un rango? Por ejemplo:

struct X { int a, b, c, d, e; }; X x = {42, 13, 97, 11, 31}; std::sort(&x.a, &x.a + 5); // kosher?


No hagas eso El compilador es libre de agregar rellenos entre los miembros de la estructura (y al final).


No, este es un comportamiento indefinido. Usted está tratando a xa como el primer elemento de una matriz, que no lo es. Puede funcionar en algunas implementaciones, también puede atacar tu refrigerador;)


No, esto no es posible en C ++. Sería bastante difícil estandarizar; en este caso, la semántica es bastante simple, pero ¿y si la estructura fuera heterogénea?


Si esto es realmente algo que quieres hacer, conviértelo en una matriz, vector o similar.

Como han dicho otros, la norma no garantiza que los miembros se almacenen sin vacíos o cosas que causen problemas. (Y para empeorar las cosas, parecerá que funciona, hasta que lo compiles con un compilador diferente (versión de), o para otra arquitectura algunos meses o años más tarde, y por supuesto, no será fácil descubrir qué salió mal).