Errori, bug, domande - pagina 1692

 

Due fonti con lo stesso contenuto occupano un numero diverso di byte (il doppio).

Sembra che a un certo punto ci sia un po' di confusione con l'unicode.

In generale, come posso fare in modo che un file grande occupi la metà dei byte? Allo stesso tempo, in modo che il testo della fonte rimanga invariato.

 
fxsaber:

Due fonti con lo stesso contenuto occupano un numero diverso di byte (il doppio).

Sembra che a un certo punto ci sia un po' di confusione con l'unicode.

In generale, come posso fare in modo che un file grande occupi la metà dei byte? Allo stesso tempo, in modo che il testo di partenza rimanga invariato.

Ho copiato il contenuto del file grande in Notepad e l'ho salvato in un nuovo file. È diventato la metà.

E come fare in modo che il metaeditor non crei "spessore"?

 
fxsaber:

E come si fa a fare in modo che il metaeditor non crei quelli "grassi"?

Non si può. È una nuova taglia ogni volta.
 
fxsaber:
L'avreste eseguito prima voi. L'errore è SOLO quiTutte le chiamate precedenti passano senza problemi.

Questo è davvero strano. I plus qui sono sbagliati in tutte e tre le chiamate.

È una storia diversa.

No, è lo stesso. Ho esaminato le chiamate di metodo nel debugger: ho commentato l'ultima chiamata nel tuo esempio, ho messo punti di interruzione su entrambi i metodi della classe e ho iniziato il debug. Il punto di interruzione è stato rimosso dal metodo void func(const int&), cioè il compilatore ha buttato fuori questo metodo, quindi l'ambiguità è stata eliminata. E se si chiama una funzione con un argomento costante, il compilatore evidentemente non rimuove il metodo con il riferimento e il risultato è un sovraccarico irrisolvibile... Qualcosa del genere. In ogni caso, il tuo codice è difettoso in C++.

 

Sergei Vladimirov:

In ogni caso, il tuo codice è difettoso in C++.

In mql, c'è un'imbottitura extra con i riferimenti. In ogni caso, non mi piace il comportamento nel codice di cui sopra.

void f(const int& x)
{}

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

Questo è davvero strano. Qui c'è un errore nei plus in tutte e tre le chiamate.

In questo caso, non vorrei affatto che ci fosse un cambiamento verso il C++.
 
Комбинатор:

In mql ci sono altri aggeggi di collegamento. In ogni caso, non mi piace il comportamento del codice di cui sopra.

void f(const int& x)
{}

void OnStart()
{
   f(5); // ошибка
}
Qui l'errore è corretto.
 
fxsaber:
In questo caso, non vorrei affatto che ci fosse un cambiamento verso il C++.

Ora, questa è la domanda corale del dibattito. Ti ho appena detto "dove il cane è nel buco".

Il comportamento, tra l'altro, è lo stesso che in C++, ma se si lasciano solo le prime due chiamate, il compilatore butta fuori una delle funzioni, quindi l'incertezza scompare. Ma è ancora un errore, solo risolto automaticamente dal compilatore.

 
fxsaber:
Qui l'errore è corretto.
Sì, ma la mia comprensione è che non dovrebbe esserci affatto)
 
Sergei Vladimirov:
Ma è una domanda discutibile. :) Ti ho appena risposto "dove è nascosto il cane".

Non c'è davvero nessun cane. La priorità nell'overload può essere impostata nel compilatore, come hanno fatto gli sviluppatori con le prime due chiamate.

Motivazione: