Erreurs, bugs, questions - page 1730

 
Sergei Vladimirov:
Exactement. J'ai lu toutes ces affirmations et je n'arrive toujours pas à comprendre où est le problème. Allez-vous stocker ces fichiers sur une disquette ?


Est-ce que cela use votre disque lorsque vous enregistrez un fichier de 100K au lieu d'un de 50K ? (N'est-ce pas drôle pour vous ? )

Et est-il normal qu'à cause d'un seul caractère de copyright (qui en principe est international et se trouve dans tous les encodages, même si son code est supérieur à 127) la taille du fichier soit doublée sans aucun sens ? N'est-ce pas astucieux ? Pourquoi gonfler les fichiers par 2 fois sans aucun besoin ?

Ce n'est pas seulement la taille qui pose problème, c'est aussi la recherche contextuelle. Tant que les fichiers sont en ASCII, vous pouvez utiliser de nombreux programmes tiers, y compris des gestionnaires de fichiers, pour rechercher des fichiers à l'aide de la chaîne contextuelle. Je l'utilise presque tous les jours. L'éditeur MQ natif est aussi nul à cet égard que pour de nombreux autres problèmes de codage évidents. Une fois que nous avons l'unicode, la recherche contextuelle a deux problèmes : tous les programmes ne peuvent ou ne veulent pas le faire, et pour ceux qui le peuvent, nous avons le point 2 - la lenteur.

Bien sûr, certaines personnes trouvent plus facile d'acheter un ordinateur plus rapide en plus du disque dur que de penser ou au moins d'apprendre d'autres produits comment les logiciels devraient être conviviaux et efficaces.

 
A100:

Alors il y a une erreur de compilation ici

En C++ aussi il y a une ambiguïté du type : const T const

Mais il y a un moyen de s'en sortir - déplacer const vers la droite.

template<typename T>
void f1(  T         const & a[] ) {} //error: 'const' - unexpected token
class A {};
void f2(  A const * const & a[] ) {} //нормально
class B {
        void g1() const { f1( a ); } //error: 'f1' - cannot to apply function template
        void g2() const { f2( a ); } //нормально
        A *a[];
};
Le C++ se compile sans erreur (compte tenu de la différence de syntaxe).
 
A100:

En C++ aussi, il y a une ambiguïté du type : const T const

Mais il y a un moyen de s'en sortir - déplacer const vers la droite.

Le C++ se compile sans erreur (compte tenu de la différence de syntaxe).

Mais logiquement, il est étrange que "const A" et "A const" signifient la même chose.

Peut-être que"Aconst*" est un pointeur constant vers un objet non-const.

Cela semble être le cas. Parce qu'une telle construction existe.

class A {};
void f( const A const * const & a[] ) {}

Vous ne pouvez pas changer le pointeur, vous ne pouvez pas changer par référence et vous ne pouvez pas changer le ou les objets.

Du point de vue de l'obtention d'un code rapide, une telle construction pourrait-elle donner au compilateur une indication appropriée ?

 
Stanislav Korotky:

Est-il normal qu'un seul caractère de copyright (qui est en principe international et présent dans tous les encodages, malgré le fait que son code soit supérieur à 127) fasse augmenter la taille du fichier de 2 fois...

Oui. À toutes fins utiles, je ne vois pas l'intérêt d'économiser sur les matchs.
 
Il est intéressant que dans cette construction
class A {};
void f( const A const * & a[] ) {}

Vous ne pouvez pas changer les éléments, mais vous pouvez changer la taille du tableau.

C'est drôle, il s'avère que les méthodes peuvent ressembler à ceci

class A {};
class B
{
  const A const * Method( const A const * const & a[] ) const
  {
    return(a[0]);
  }
};
 
fxsaber:

Il est possible que"Aconst*" soit un pointeur constant et non un objet constant.

Si ce n'est pas un modèle, alors "A const *" équivaut à "const A *", et si c'est un modèle, dans cette situation (en C++ )
 
A100:
Si ce n'est pas un modèle, alors "A const *" équivaut à "const A *", et si c'est un modèle, alors par situation
Il ne devrait donc pas y avoir d'équivalence. MQL le considère comme équivalent, cependant
class A
{
public:
  int i;
};

void f( A const * & a[] )
{
  a[0].i = 1; // 'i' - constant cannot be modified
}
A mon avis, il y a une erreur ici. Parce que c'est un tableau de pointeurs constants (const *) qui est transmis, et non un tableau de pointeurs vers des objets constants(const A).
 
A100:
Spécifiquement ceci - corrigé dans le futur https://www.mql5.com/ru/forum/1111/page1749#comment_2892563
Alors il ne devrait pas y avoir d'équivalence dans votre déclaration
A100:
Si ce n'est pas un modèle, alors "A const *" équivaut à "const A *", et si c'est un modèle - dans cette situation (en C++ )
 
fxsaber:
C'est intéressant que dans un design comme celui-ci...
class A {};
void f( const A const * & a[] ) {}

Les éléments ne peuvent pas être modifiés, mais la taille du tableau peut être modifiée.

Vraiment ? C'est une déception, ça ne devrait pas être comme ça.
 
Комбинатор:
Sérieusement ? C'est dommage, ça ne devrait pas être comme ça.
C'est logique.