Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Non sono d'accordo:
Per favore, aggiorna la tua conoscenza di cosa sono "l'operatore di assegnazione" e il "costruttore di copia", come differiscono, quando e come vengono chiamati (esplicitamente e implicitamente).
Nel codice avete evidenziato in giallo il ritorno di una variabile locale da una funzione, che risulta nella chiamata del costruttore di copia predefinito (da non confondere con l'operatore di assegnazione).
Cosa sia un "tipo di dati completo", purtroppo, non è del tutto chiaro, né lo è quello che stavi cercando di dimostrare con il tuo codice...
Ripeto:"l'operatore di assegnazione predefinito di MQL restituiscedati di tipo void;".
Sbagliato.
Basta definire il vostro operator=, che restituisce questo, e vedere la differenza.
Puoi vedere la differenza quando il risultato dell'assegnazione viene assegnato di nuovo.
Se definisco operator=, perdo il mio obiettivo iniziale di chiamare il default ::=
Sembra essere una domanda irrisolvibile.
Che cos'è il "tipo di dati completo", purtroppo, non è molto chiaro, né lo è quello che stavi cercando di dimostrare con il tuo codice...
full è full - la struttura dei dati sarà conservata e non c'è bisogno di controllare la copia delle strutture se aggiungo nuovi campi
Se definisco l'operatore =, mi allontano dal mio obiettivo iniziale di chiamare il default ::=
Hai davvero bisogno di questo tipo di incarico?
complete è completo - la struttura dei dati sarà conservata e non c'è bisogno di controllare la copia delle strutture se vengono aggiunti nuovi campi
Quindi, secondo la vostra terminologia, chiamare l'operatore di assegnazione predefinito potrebbe dare un "tipo di dati incompleto".
Il bug del 2019.05.03 non è mai stato risolto:https://www.mql5.com/ru/forum/1111/page2451#comment_11556395
Avete davvero bisogno di un tale incarico?
puramente in teoria, voglio sapere se è una "nuova entità" piuttosto che un operatore =
Non mi serve affatto per l'uso pratico, non ho problemi a metterlo in 2 operatori
Allora, secondo la vostra terminologia, chiamare l'operatore di assegnazione predefinito può dare un "tipo di dati incompleto".
Il bug del 2019.05.03 non è mai stato risolto:https://www.mql5.com/ru/forum/1111/page2451#comment_11556395
"la mia terminologia" è quella di chiedere, senza lamentarsi,
ma il punto di usare l'operatore predefinito = è che è conveniente descrivere solo i campi nella struttura, e tutto viene copiato, comprese anche le dimensioni degli array (anche se solo con dimensioni crescenti - il principio di lavoro è lo stesso di ArrayCopy() )
Beh, se si tratta di un bug, deve essere così lontano.
la questione è puramente teorica:
hanno visto, forse in SB, una chiamata al costruttore come questa:
come sarebbe diverso questo codice:
L'ho decompresso, non vedo alcuna differenza, allora sii un po' più specifico - cosa o perché possiamo usare una chiamata forzata al costruttore per gli oggetti a1 e a2?
qual è la "convenienza" della prima opzione?
la questione è puramente teorica:
hanno visto, forse in SB, una chiamata al costruttore come questa:
come sarebbe diverso questo codice:
L'ho decompresso, non vedo alcuna differenza, allora sii un po' più specifico - cosa o perché possiamo usare una chiamata forzata al costruttore per gli oggetti a1 e a2?
qual è la "convenienza" della prima opzione?
I costruttori possono avere parametri e devono essere passati in qualche modo.
Cioè, finché non ci sono parametri, non c'è differenza, ma se usate il costruttore A(int arg), è una storia diversa
I costruttori hanno dei parametri, e devono essere passati in qualche modo
Cioè, finché non ci sono parametri, la differenza è insignificante. Ma se avete il costruttore A(int arg), è una storia diversa
Probabilmente hai ragione - dipende dallo scopo
Mi sono appena messo nei guai a causa della prima variante, quando volevo usare 2 costruttori della classe B e ho ricevuto codice duplicato in entrambi i costruttori - li ho rimossi, e tutto quello che ho ottenuto è stata una parte di codice che era nella prima variante, ed è sorta la domanda dove l'ho visto e perché l'ho scritto in quel modo )))
cosa dà o perché i costruttori degli oggetti a1 e a2 possono essere forzati?
Il nome corretto del processo non è "chiamata forzata del costruttore a1 e a2", ma inizializzazione dei campi (non statici) della classe.
Obbligatorio nei casi di:
Qualcuno può spiegare come questa inizializzazione dei campi sia migliore di questa:
è meglio di questo:
E comunque qual è il punto?