elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19
71  Programación / Programación C/C++ / Sobrecarga de operador y constructores/destructores en: 17 Junio 2019, 04:54 am
Hola..

haciendo algunos ensayos, me he encontrado con una sorpresa, cuando intento utilizar algún operador sobrecargado con un tipo propio, se ejecuta el constructor y el destructor al instante.... ej:

Código
  1.  
  2. struct x{
  3.  
  4. private:
  5.     int a;
  6.  
  7. public:
  8.     x(){ std::cout << "Constructor ejecutado."; }
  9.     ~x() { std::cout << "Deconstructor ejecutado."; }
  10.     inline void setA(const int _a){ this->a = _a; }
  11.     inline int getA() const { return this->a; }
  12. }
  13.  
  14. std::ostream operator <<(std::ostream & _os, const x _x){
  15.     _os << _x.getA();
  16.     return _os;
  17. }
  18.  
  19.  
  20.  
  21. int main(){
  22.  
  23.     x typeX;    //Constructor llamado como es usual..
  24.     std::cout << x;     //Constructor y deconstructor llamados, por que?
  25.  
  26. }
  27.  
  28.  
  29.  
72  Programación / Programación C/C++ / Re: El mecanismo de static_assert(); en: 16 Junio 2019, 04:58 am
entiendo, entonces es del IDE, no del compilador...
podria salvar varios minutos de compilacion...

llego un momento en que me pregunte : para que rayos tengo que darle un segundo argumento con el error si ya de antemano me lo esta señalando...

gracias por las respuestas.
73  Programación / Programación C/C++ / Re: El mecanismo de static_assert(); en: 16 Junio 2019, 00:56 am
Gracias por la respuesta...
Entiendo todo lo que has puesto, pero no me había enfocado a eso amigo, sino al comportamiento de MSVS 2017, que me corregía al vuelo el problema que había cuando static_assert() estaba detectando...  esto claramente no es tiempo de compilación, por eso puse "Edito" mas abajo, porque me di cuenta que es una característica de MS y no de GCC (por ejemplo)..

Saludos.
74  Programación / Programación C/C++ / El mecanismo de static_assert(); en: 15 Junio 2019, 19:20 pm
Hola !

He llegado al punto de practicar el static_assert(), entiendo ya como funciona y a que se refiere, seria basicamente una afirmacion a la fuerza y evaluada luego, si es falsa entonoces habra un error, si es verdadera, continuara con el programa.

Lo que entiendo (a diferencia de assert()) es que static_assert evalua en tiempo de compilacion, aqui esto no lo entiendo bien, a que se refiere con tiempo de compilacion ?....  mientras escribes el codigo o cuando haces el build?  Si si, entiendo que esta pregunta es absurda, se supone que tiempo de compilacion es cuando haces build, pero lo pregunto por lo siguiente:

Resulta que estoy en Visual Studio 2017, al escribir:

Código
  1.  
  2. int main (){
  3.     static_assert(sizeof(int) == 4, "Su sistema no es de 64bits");
  4.     std::cout << "64 bits.";
  5.  
  6. }
  7.  

No me va ningun error, es decir, todo bien... pero si le cambio el valor 4 por 5, o por cualquier otro, de inmediato VS me lanza un error, y la descripcion del error es justamente el segundo argumento "Su sistema no es de 64bits", esto quiere decir que static_assert esta evaluando mientras escribo el codigo, no cuando hago build..


Esto definitivamente no puede ser ni tiempo de ejecucion, ni tiempo de compilacion, como le podriamos llamar??..


Editado:
Parece que es el compilador de Microsoft el que hace esta verificacion en el tiempo de edicion, GCC parece no tenerla, no sale el error hasta que le doy build...  entonces SI que es en tiempo de compilacion, pero el compilador de MS te ahorra un poco mas de tiempo mostrandote mientras escribes...
75  Programación / Programación C/C++ / Re: constexpr .. alguna analogia que lo explique mas facil ? en: 15 Junio 2019, 19:11 pm
1500 dólares... mas los pasajes....
prefiero verme un tutorial o ver diferida la presentación y hacer el sándwich en casa  :silbar: :xD
76  Programación / Programación C/C++ / Re: constexpr .. alguna analogia que lo explique mas facil ? en: 10 Junio 2019, 05:18 am
Que curioso, hice varias pruebas con funciones usando constexpr retornando una variable y siempre me marco error, pero si las cambiaba por literales, entonces funcionaban...


Y ahora que intento recrear la escena, funcionan retornando una variable..

:-\
Una consulta respecto al ultimo trozo de código...
En la línea 11, tienes int x;, pero no esta inicializado, que valor se le pasara a la función ?

saludos y gracias.



Ah!!.. ya vi el por que, pasa que en C++11 las funciones constexpr solo pueden retornar valores (o expresiones) constantes, no variables...

Sin embargo, como bien dices, la versión C++14 si lo puede hacer... debio ser un update del lenguaje...  es que el libro que estoy siguiendo es la versión 11..y precisamente esta usando la version 11 del compilador.

Ya me tenia sin cabello la duda...
Saludos..
77  Programación / Programación C/C++ / Re: constexpr .. alguna analogia que lo explique mas facil ? en: 10 Junio 2019, 00:26 am
aha… veo que son caprichos del comitee  >:(

Lo que acabas de decir sobre int (como un constante por defecto) me hace bastante sentido quizá por eso la exclusión..

Bueno, y que opinas de lo que pienso sobre las funciones que retornan un tipo que tiene constexpr ?..

Gracias.
78  Programación / Programación C/C++ / Re: constexpr .. alguna analogia que lo explique mas facil ? en: 9 Junio 2019, 21:46 pm
No se si me ha quedado mas o menos claro pero lo que acabo de captar es lo siguiente:

1) Las funciones declaradas como constexpr solo van a retornar literales constantes, ej:

Código
  1.     return (a + b);
  2.     return 5 * 8;
  3.     return (580 * a + (b / 2));
  4.  
  5.  

y nunca variables:

Código
  1.     int v = (a + b);
  2.     return v;  
  3.  
  4.     float x = (580 * a + (b / 2));
  5.     return x;
  6.  
  7.  
           

Vi otra cosa respecto a constexpr respecto a int vs double y float..

Código
  1.  
  2. //esto no da problemas:
  3. const int ix = 7;
  4. constexpr double dx = 520.5 * ix;
  5.  
  6. //pero esto si los da:
  7. const float fx = 7;
  8. constexpr double dx = 520.5 * fx;
  9.  
  10. //esto tambien da problemas:
  11. const double dx1 = 7;
  12. constexpr double dx2 = 520.5 * dx1;
  13.  
  14.  

El compilador dice que ni const float fx, ni const double dx1 son utilizables como constexpr.  en cambio estoy forzado a lo siguiente para que funcione:

Código
  1.  
  2. constexpr float fx = 7.5f;                
  3. constexpr double dx = 520.5 * fx;
  4.  
  5.  

Es decir, en los casos de los tipos double y float, no debo usar const, sino constexpr..

La gran pregunta, por que ?

Salud! y gracias.



 
79  Programación / Programación C/C++ / Re: constexpr .. alguna analogia que lo explique mas facil ? en: 9 Junio 2019, 19:43 pm
 >:D No se quien fue el responsable que me dio el dato del libro  :silbar:


De lo que he visto hasta ahora también se usa con las plantillas...
vamos a ver que tal la sección donde lo aclara con mas detalles...
y por cierto, gracias por la explicacion.
80  Programación / Programación C/C++ / constexpr .. alguna analogia que lo explique mas facil ? en: 9 Junio 2019, 17:59 pm
Hola!

"spam"
Por sugerencia de un usuario del foro me he comprado el libro "The C++ Programming Language 4th Edition - Bjarne Strouptup",
"/spam"  (perdón  :laugh:) entonoces he llegado a una parte que empieza a hablar sobre constexpr,  pero aun no entiendo bien su funcionamiento, es decir, es lógico que quiere decir que se pueden crear expresiones constantes, pero no le veo mayor diferencia con la palabra reservada const al menos por ahora....

Lo que llegue a comprender solamente es que no puedo asignarle valores no-constantes a una expresión constante.....  estoy seguro que es constexpr es algo muy muy útil...  alguna luz del para que sirve?

Gracias..
Páginas: 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines