Tu vuoi (come penso sia ovvio) - ottenere nomi sovrascritti nelle variabili dei nomi di file...
Affinché Init() funzioni correttamente, deve essere chiamato dopo la costruzione dell'oggetto.
O no?
Penso che il VMT sia inizializzato solo nel codice di terminazione del costruttore, quindi quando chiamate un metodo nel costruttore, chiamerà un metodo di tipo variabile, non di tipo oggetto costruibile.
Post tecnico (inizio di una piccola discussione sull'inizializzazione, anche nei costruttori). Spostato, così non si perde sotto i passi pesanti dei nuovi arrivati: https://www.mql5.com/ru/forum/58/page31#comment_66890
Una domanda sull'inizializzazione. Come regola generale, l'inizializzazione delle variabili stringa e degli oggetti complessi è fatta automaticamente, "per difetto". Questo spreca una certa quantità di potenza di calcolo del computer (lo chiamo "orologio del computer", scusate i termini amatoriali).
Ora ci sono liste di inizializzazione che permettono di inizializzare le variabili con valori personalizzati. C'è qualche differenza nella velocità di inizializzazione tra l'inizializzazione automatica e l'inizializzazione con un valore personalizzato? In altre parole, il numero di "colpi di computer" quando si usano liste di inizializzazione (e valori personalizzati) aumenta rispetto all'inizializzazione automatica?
Yedelkin: In altre parole, l'utilizzo di liste di inizializzazione (e valori personalizzati) aumenta il numero di "cicli del computer" rispetto all'inizializzazione automatica?
E se si risparmia qualche ciclo di clock, questo darebbe un guadagno significativo? Soprattutto perché l'inizializzazione viene fatta solo una volta, e i valori dovranno ancora essere assegnati in seguito.
Valmars: E se risparmiamo qualche ciclo di clock, ci sarà un guadagno significativo? Soprattutto perché l'inizializzazione viene fatta una volta sola, e i valori dovranno ancora essere assegnati in seguito.
La risposta non è nel merito. Personalmente, la domanda è importante per me, perché voglio capire la tecnica. Ogni singolo ciclo di clock è importante. Altrimenti non ci sarebbe alcuna domanda. Sappiamo come rivettare le teiere, senza badare alle regole.
Yedelkin: Questa è una domanda importante per me personalmente, perché voglio capire la tecnica.
Con il giusto approccio, tutto sarebbe così. Le liste di inizializzazione sono una conseguenza dell'introduzione dei costruttori parametrici.
Esaminiamo due esempi:
class A
{
private:
// конструктор по умолчанию недоступен
A(){}
public:
A(constdouble& value)
: m_Value(value)
{}
private:
double m_Value;
}
class B
{
public:
B()
// т.к. коструктор А не имеет конструктора по умолчанию, единственный способ// использования класса -- инициализация в списке инициализации.// по-другому просто не должно скомпилиться
: A(0)
{
}
private:
A m_Value;
}
È tutto scritto nei commenti.
Esempio 2:
class A
{
public:
A()
{
Init(0);
}
A(constdouble& value)
{
Init(value);
}
void Init(doublevalue)
{
// очень тяжелая функция
}
};
class B
{
public:
// вариант1, правильный
B(constdouble& value)
: m_Value(value)
{
}
/*
// вариант2, неправильный
B(const double& value)
{
m_Value.Init(value);
}
*/private:
A m_Value;
};
Così, nella variante 1 abbiamo 1 chiamata di Init e nella variante 2 abbiamo 2 chiamate. E poiché la funzione "mi piace" è molto pesante, il plus è lì.
Ho capito indirettamente dalle tue parole, che non c'è differenza di velocità tra l'auto-inizializzazione di una variabile di tipo " stringa, array dinamico e oggetto complesso" e l'inizializzazione utente della stessa variabile.
Ho capito implicitamente dalle tue parole che non c'è differenza di velocità tra l'inizializzazione automatica di una variabile di tipo " stringa, array dinamico e oggetto complesso" e l'inizializzazione della stessa variabile da parte dell'utente.
Mostrami un esempio, in modo che non ci sia confusione, poi ti risponderò.
Tu vuoi (come penso sia ovvio) - ottenere nomi sovrascritti nelle variabili dei nomi di file...
Affinché Init() funzioni correttamente, deve essere chiamato dopo la costruzione dell'oggetto.
O no?
Penso che il VMT sia inizializzato solo nel codice di terminazione del costruttore, quindi quando chiamate un metodo nel costruttore, chiamerà un metodo di tipo variabile, non di tipo oggetto costruibile.
È qualcosa del genere.
Almeno questo funziona:
A MetaQuotes: se ho capito bene, è meglio proibire del tutto la chiamata di funzioni virtuali nei costruttori. A.
O farli funzionare correttamente. Cosa di cui dubito.
Sto imparando a conoscere i costruttori parametrici. Ma sembra che nell'esempio
Le parentesi nella riga evidenziata sono posizionate in modo errato.Sto imparando a conoscere i costruttori parametrici. Ma sembra che nell'esempio
nella linea evidenziata ha le parentesi sbagliate.Post tecnico (inizio di una piccola discussione sull'inizializzazione, anche nei costruttori). Spostato, così non si perde sotto i passi pesanti dei nuovi arrivati: https://www.mql5.com/ru/forum/58/page31#comment_66890
Una domanda sull'inizializzazione. Come regola generale, l'inizializzazione delle variabili stringa e degli oggetti complessi è fatta automaticamente, "per difetto". Questo spreca una certa quantità di potenza di calcolo del computer (lo chiamo "orologio del computer", scusate i termini amatoriali).
Ora ci sono liste di inizializzazione che permettono di inizializzare le variabili con valori personalizzati. C'è qualche differenza nella velocità di inizializzazione tra l'inizializzazione automatica e l'inizializzazione con un valore personalizzato? In altre parole, il numero di "colpi di computer" quando si usano liste di inizializzazione (e valori personalizzati) aumenta rispetto all'inizializzazione automatica?
E se risparmiamo qualche ciclo di clock, ci sarà un guadagno significativo? Soprattutto perché l'inizializzazione viene fatta una volta sola, e i valori dovranno ancora essere assegnati in seguito.
Questa è una domanda importante per me personalmente, perché voglio capire la tecnica.
Con il giusto approccio, tutto sarebbe così. Le liste di inizializzazione sono una conseguenza dell'introduzione dei costruttori parametrici.
Esaminiamo due esempi:
È tutto scritto nei commenti.
Esempio 2:
Così, nella variante 1 abbiamo 1 chiamata di Init e nella variante 2 abbiamo 2 chiamate. E poiché la funzione "mi piace" è molto pesante, il plus è lì.TheXpert, grazie mille! Ci darò un'occhiata.
Ho capito indirettamente dalle tue parole, che non c'è differenza di velocità tra l'auto-inizializzazione di una variabile di tipo " stringa, array dinamico e oggetto complesso" e l'inizializzazione utente della stessa variabile.
Ho capito implicitamente dalle tue parole che non c'è differenza di velocità tra l'inizializzazione automatica di una variabile di tipo " stringa, array dinamico e oggetto complesso" e l'inizializzazione della stessa variabile da parte dell'utente.