Erreurs, bugs, questions - page 1692

 
fxsaber:

Deux sources ayant le même contenu occupent un nombre différent d'octets (deux fois plus différent).

Il semble qu'il y ait eu des manipulations d'unicode à un moment donné.

D'une manière générale, comment faire en sorte qu'un gros fichier occupe deux fois moins d'octets ? En même temps, pour que le texte source reste inchangé.

J'ai copié le contenu du gros fichier dans le Bloc-notes et l'ai enregistré dans un nouveau fichier. Il est devenu deux fois plus petit.

Et comment faire pour que le métaéditeur ne crée pas de "gros" ?

 
fxsaber:

Et comment faire pour que le métaéditeur ne crée pas de "grosses" ?

Tu ne peux pas. C'est une nouvelle taille à chaque fois.
 
fxsaber:
Vous l'auriez fait en premier. L'erreur se produit UNIQUEMENT ici. Tous les appels précédents passent sans problème.

Celui-là est vraiment bizarre. Les plus ici sont faux dans les trois appels.

C'est une autre histoire.

Non, c'est la même chose. J'ai examiné les appels de méthode dans le débogueur : j'ai commenté le dernier appel dans votre exemple, j'ai placé des points d'arrêt sur les deux méthodes de la classe et j'ai commencé à déboguer. Le point d'arrêt a été supprimé de la méthode void func(const int&), c'est-à-dire que le compilateur a éliminé cette méthode, ce qui a permis de lever l'ambiguïté. Et si vous appelez une fonction avec un argument constant, le compilateur ne supprime évidemment pas la méthode avec la référence et le résultat est une surcharge insoluble... Quelque chose comme ça. Dans tous les cas, votre code est défectueux en C++.

 

Sergei Vladimirov:

Dans tous les cas, votre code est défectueux en C++.

En mql, il y a un bourrage supplémentaire avec des références. Quoi qu'il en soit, je n'aime pas le comportement du code ci-dessus.

void f(const int& x)
{}

void OnStart()
{
   f(5); // ошибка
}
 
Sergei Vladimirov:

Celui-là est vraiment bizarre. Il y a une erreur dans les plus ici dans les trois appels.

Dans ce cas, je ne voudrais pas du tout qu'il y ait un changement vers le C++.
 
Комбинатор:

Dans mql, il existe des dispositifs de liaison supplémentaires. En tout cas, je n'aime pas le comportement du code ci-dessus.

void f(const int& x)
{}

void OnStart()
{
   f(5); // ошибка
}
L'erreur est correcte ici.
 
fxsaber:
Dans ce cas, je ne voudrais pas du tout qu'il y ait un changement vers le C++.

Maintenant, c'est la question chorale du débat. Je viens de vous dire "où le chien est dans le trou".

Le comportement est d'ailleurs le même qu'en C++, mais si vous ne laissez que les deux premiers appels, le compilateur jette l'une des fonctions, ce qui fait disparaître l'incertitude. Mais c'est toujours une erreur, juste corrigée automatiquement par le compilateur.

 
fxsaber:
L'erreur est correcte ici.
Oui, mais à mon avis, il ne devrait pas y en avoir du tout).
 
Sergei Vladimirov:
Mais c'est une question discutable. :) Je viens de vous répondre "où le chien est caché".

Il n'y a vraiment pas de chien ici. La priorité dans la surcharge peut être définie dans le compilateur, comme les développeurs l'ont fait avec les deux premiers appels.

 
fxsaber:

Il n'y a vraiment pas de chien ici. La priorité dans la surcharge peut être définie dans le compilateur, comme les développeurs l'ont fait avec les deux premiers appels.

Eh bien, ils ne l'ont pas fait dans le troisième. Je persiste à dire que cet exemple est une erreur de programmeur. Bien sûr, il est bon que le compilateur corrige certaines de ces erreurs, mais elles restent des erreurs.
Raison: