Alexey Navoykov: Tout semble être correct, je pense. Le constructeur move y est probablement appelé, qui dans MQL est remplacé par copy.
Une conversion est comme (A)a1
(A)a1 ou A(a1) n'est pas un cast, c'est une déclaration de type comme dans la docs. Bien que maintenant, il y a quelque chose qui cloche avec les parenthèses. Un format unique est nécessaire pour la langue.
(A)a1 ou A(a1)conversion de type A a1 n'est pas une conversion, mais une déclaration de type comme dans la documentation. Bien que maintenant, il y a quelque chose qui cloche avec les parenthèses. Un format commun est nécessaire pour la langue.
La différence est que (A)a1 en plus signifie la conversion de la copie de l'objet. Et dans MQL, c'est la conversion de référence, ce qui peut poser un problème de compatibilité.
Il y a longtemps, je leur ai demandé de faire une conversion comme dans les plus : (A&)a1, mais maintenant ils ne vont probablement rien changer.
Alexey Navoykov: La différence ici est que dans les plus (A)a1 signifie apporter une copie d'un objet. Et dans MQL, il s'agit de la conversion de référence. Pour cette raison, on peut rencontrer des problèmes de compatibilité.
J'ai longtemps demandé qu'ils fassent une conversion sonore comme chez les pros : (A&)a1, mais il est peu probable qu'ils changent quoi que ce soit maintenant.
Pas si pas python) quelque chose entre les deux. Oups, je ne savais pas, j'ai pensé à la conversion du type d' objet. Économie).
Alexey Navoykov: Tout semble être correct. C'est juste que le constructeur move y est probablement appelé, ce qui dans MQL est remplacé par la copie.
Et le fantôme est comme (A)a1
Je doute que ce soit juste, parce que, disons :
class A {
public:
virtualvoid f() { Print( 1 ); }
};
class B : public A {
public:
virtualvoid g() { ((A)this).f(); }
};
class C : public B {
public:
virtualvoid f() { Print( 3 ); }
};
voidOnStart()
{
B *b = new C;
b.g();
}
Et comment proposez-vous d'écrire la 3ème version de g_cast dans MQL ?
Vous pouvez appeler explicitement la fonction à partir de la classe de base :
class A {
public:
virtualvoid f() { Print( 1 ); }
};
class B : public A {
public:
virtualvoid g() { this.A::f(); } //1
};
class C : public B {
public:
virtualvoid f() { Print( 3 ); }
};
voidOnStart()
{
B *b = new C;
b.g();
}
Erreur d'exécution :
Résultat : 1-2-2-0-0-0
Résultat attendu : 1-2-0-0
comme en C++. De plus, la syntaxe devait être uniforme : un cast est un cast, pas un appel à un constructeur.
Tout semble être correct, je pense. Le constructeur move y est probablement appelé, qui dans MQL est remplacé par copy.
(A)a1 ou A(a1) n'est pas un cast, c'est une déclaration de type comme dans la docs. Bien que maintenant, il y a quelque chose qui cloche avec les parenthèses. Un format unique est nécessaire pour la langue.
(A)a1 ou A(a1)conversion de type A a1 n'est pas une conversion, mais une déclaration de type comme dans la documentation. Bien que maintenant, il y a quelque chose qui cloche avec les parenthèses. Un format commun est nécessaire pour la langue.
La différence ici est que dans les plus (A)a1 signifie apporter une copie d'un objet. Et dans MQL, il s'agit de la conversion de référence. Pour cette raison, on peut rencontrer des problèmes de compatibilité.
Pas si pas python) quelque chose entre les deux. Oups, je ne savais pas, j'ai pensé à la conversion du type d' objet. Économie).
Tout semble être correct. C'est juste que le constructeur move y est probablement appelé, ce qui dans MQL est remplacé par la copie.
Je doute que ce soit juste, parce que, disons :
Le résultat en MQL : 3
et en C++ : 1.
Dans tous les cas, demandez-leur de vérifier
Je doute que ce soit correct, car disons que :
Le résultat en MQL : 3
et en C++ : 1.
Dans tous les cas, demandez-leur de vérifier
Je doute que ce soit correct, car disons que :
Le résultat en MQL : 3
et en C++ : 1.
Dans tous les cas, laissez-les vérifier.
Je ne serais pas aussi catégorique lorsque j'interprète du code MQL en C++.
Code for C++ (en ligne : https://onlinegdb.com/Hy1FIj9Qv):
Je ne serais pas aussi univoque en interprétant du code MQL en C++.
Le code est pour C++ (en ligne : https://onlinegdb.com/Hy1FIj9Qv):
Et comment proposez-vous d'écrire la troisième version de g_cast en MQL ?
Et comment proposez-vous d'écrire la 3ème version de g_cast dans MQL ?
Vous pouvez appeler explicitement la fonction à partir de la classe de base :
Vous pouvez appeler explicitement une fonction à partir d'une classe de base :
Si et quand il est corrigé
il peut bien sûr aussi être appelé explicitement dans le cas général