Error del compilador con el parámetro de la plantilla = void* - página 4

 
Dmitry Fedoseev:

¿Has probado a leer el enlace que nos has dado? Slava explica popularmente por qué es así - porque la prioridad se confundió en el antiguo MQL4. Por eso, ahora es importante llamar la atención. Ni siquiera es bueno que sólo haya una advertencia, sería mejor que hubiera un error.

O, una bofetada en la cara

 
Dmitry Fedoseev:

¿Has probado a leer el enlace que nos has dado? Slava explica popularmente por qué es así - porque la prioridad se confundió en el antiguo MQL4. Por eso, ahora es importante llamar la atención. Ni siquiera es bueno que sólo haya una advertencia, sería mejor que hubiera un error.

¿Y qué? Aquí:

int i = 1 << 2 + 3;

También en el MQL4 se confundió la prioridad? Se trata del enfoque general, no del caso especial. En el caso particular se puede dar una advertencia/error (como excepción) pero ¿por qué debería extenderse a todo lo demás?

Además, en MQL4 (que yo sepa) digamos que el operador || no tiene pereza. Y a pesar de esto, el compilador MQL5 no genera una advertencia en casos similares (no sugiere romper || en varias operaciones atómicas)

De lo que se deduce que la página correspondiente de la historia se invierte

 

Me gustaría añadir a ... que incluso la Documentación dice:

"Para cambiar el orden de las operaciones se utilizan paréntesis, que tienen la máxima prioridad".

lo que implica que el uso de paréntesis para otros fines (no relacionados con el cambio de orden) debe seguir estando justificado

 
fxsaber:

Me pregunto dónde está el umbral del número de programadores cuando se debe dudar. 5 no es suficiente. 1.000 no es suficiente. 10.000 - vacilen. Y, por último, N: la confianza. Sin embargo, cuando era (N-1) - no me fiaba todavía.

El umbral no se define en valor absoluto, sino como un % del número de personas que piensan lo contrario. La mayoría puede estar equivocada, pero no el 99% es un criterio fiable

 
A100:
Y en 1961x32 todo funciona... ¡vaya!

Hmm, una característica interesante. A partir de ahora también especificaré el bitrate de la plataforma

 
A100:

¿Y qué? Aquí:

int i = 1 << 2 + 3;

¿también en el MQL4 se confundió la prioridad?

Sí, la documentación dice que la prioridad era diferente en la versión antigua.

Pero, en mi opinión, todo esto hace tiempo que es irrelevante. Y más aún si se especifica la directiva estricta. Y si alguien desentierra un código antiguo e intenta compilarlo, tendrá que rehacer muchas cosas allí de todos modos. Así que estas advertencias son una reliquia del pasado. Por eso estoy de acuerdo en que no hay que lanzar advertencias en el vacío.

 
Perdona, si lo sabes, ¿hay alguna forma de obtener int desde void*ptr en mql que no sea (int)StringFormat("%i",ptr)?
 
A100:

Así que en su código los paréntesis no significan nada, la declaración ... parece ilógico y en el caso de los paréntesis necesitamos entender si las prioridades/orden han cambiado realmente, mientras que en mi código los paréntesis por sí mismos significan el cambio de prioridades/orden (la presencia/ausencia de paréntesis lo deja todo claro)

soportes
fxsaber
A100
hay
incomprensible
se invierten las prioridades de las operaciones
no
las prioridades de las operaciones no se han modificado
las prioridades de las operaciones no se han modificado

Los paréntesis hacen que una expresión sea completamente inequívoca.

Las propias advertencias (no sólo sobre los paréntesis) nos hablan no de un error, sino de la posibilidad de un error. Pero usted propone deshacerse de todas las advertencias por completo, porque las prioridades (no sólo con paréntesis) están claramente especificadas en el compilador.

A100:

El umbral no se define en valor absoluto, sino como un porcentaje del número de personas que piensan de otra manera. La mayoría puede estar equivocada, pero no el 99% es un criterio fiable

La misma pregunta sobre el número no en absoluto, sino en relativo. ¿Es el 98% un criterio fiable? А 97%? ¿Dónde está ese umbral en el que hay que empezar a dudar de la fiabilidad? Aunque el 100% de los que te rodean afirmen que eres un maníaco homicida. ¿Es un criterio creíble?

 
Ilya Malev:
Perdón por salirme del tema, me pueden decir si alguien sabe: ¿hay alguna forma en mql de obtener int desde void*ptr que no sea (int)StringFormat("%i",ptr)?

sólo a través de cadenas, solía obtener la dirección del puntero a través deStringConcatenate(), así:

Cinteger *x = new Cinteger();
   string s;
   int zz=StringConcatenate(s,"*x = ",x);
   Print("OK ",s);
 
Alexey Navoykov:

El ejemplo más trivial es la clase array. En este caso, se utiliza para almacenar cualquier puntero:

Tal conjunto es de dudosa utilidad, francamente hablando. ¿Qué puede hacer con él? Sabes que no llamarás automáticamente a la eliminación de los miembros del array, ¿verdad?

Razón de la queja: