Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Esta advertencia no debería darse, porque la función ObjectGetDouble pasa una referencia y la sentencia if comprueba la verdad devuelta por ambas llamadas, y por lo tanto, sólo si ambas funciones devuelven verdadero entonces estas variables son manejadas, lo que significa que ambas variables no pueden ser no establecidas al valor correcto.
El compilador no expande su mente lo suficiente como para asegurarse de que estas variables serán necesariamente inicializadas como resultado de una llamada a ObjectGetDouble. Intente escribir el suyo propio en su lugar, donde el valor del parámetro de entrada pasado por referencia se establecerá explícitamente. ¿Qué dirá el compilador?
Rashid, en realidad no se trata de "conciencia", sino de matemáticas.
Rashid, en realidad no se trata de "conciencia", sino de matemáticas.
1. Existe el concepto de "evaluación abreviada de expresiones lógicas".
2. El compilador no puede saber con seguridad si la variable pasada por referencia será rellenada.
3. Una advertencia es sólo eso, una advertencia para llamar su atención sobre la posibilidad de un problema.
Rashid, en realidad no se trata de "conciencia", sino de matemáticas.
Bien, definamos dicha fusión
¿Hay alguna garantía de que la variable param se inicialice?Bien, definamos una función de este tipo
¿Hay alguna garantía de que la variable param será inicializada?Se trata de una función en la que el resultado "param" NO se modifica. Así que aquí la advertencia debe ser dada al 1000% :)
La solución estándar en este caso es la siguiente: si hay una rama de ejecución de código en la que no se puede cambiar el valor, se considera que esta función no cambia el valor. Y generará una advertencia.
Rashid, ¿quieres que coja cualquiera de los compiladores modernos de C++ y C y compile dicho código y estoy seguro de que ninguno de ellos dará un aviso de izquierda.
Además, si tienes esos "problemas" con la detección de esas cosas, de repente empiezas a tener una duda muy fuerte de que no hay ninguna optimización como tal. ¿O no?
Rashid, quieres que coja cualquiera de los compiladores modernos de C++ y C y compile un código similar y estoy seguro de que ninguno dará un aviso de izquierda.
¿De qué estamos discutiendo? w0 no ponen
PS Definitivamente habrá un mensaje (tal vez unas líneas más abajo)
Está claro que esto no es una mejora, sobre todo si hay tales "problemas" con la detección de tales cosas, entonces se asoma una GRAN duda de que no hay ninguna optimización como tal. ¿O no?
Si miras la ayuda de ObjectGetDouble:
Devuelve true o false dependiendo del éxito de la función. Si tiene éxito, el valor de la propiedad se coloca en la variable de destino, pasada por referencia por el último parámetro.
Por lo tanto, concluimos que el llenado de la variable de recepción no está garantizado en caso de cualquier error. Por eso el mensaje del compilador es válido.
EN MI OPINIÓN.
Algo no está sincronizado en la última versión.
Haciendo un pequeño EA:
Ejecutando el probador,
2011.02.22 11:54:21 Core 1 2011.02.07 00:00:00 ¡Todo está bien!
Hago cambios en mi EA:
Lo compilo, ejecuto el probador y responde:
2011.02.22 11:57:55 Core 1 2011.02.07 00:00:00 ¡Todo normal!
Sólo ayuda a reiniciar el terminal.
Algo no está sincronizado en la última versión.
Haciendo un pequeño EA:
Ejecutando el probador,
2011.02.22 11:54:21 Core 1 2011.02.07 00:00:00 ¡Todo está bien!
Hago cambios en mi EA:
Lo compilo, ejecuto el probador y responde:
2011.02.22 11:57:55 Core 1 2011.02.07 00:00:00 ¡Todo normal!
Sólo ayuda a reiniciar el terminal.