Cosa significa il modificatore const dopo una dichiarazione di metodo - pagina 3

 
Non è raro usare intenzionalmente anche questi costrutti:
const TYPE1 Method( const TYPE2 Input ) const;
E se non solo cambio i dati interni dell'oggetto, ma non vi accedo, scrivo immediatamente il metodo come statico. Per me, usare const e static aumenta notevolmente la leggibilità/comprensione del mio codice. E spesso mi permette di catturare bug o difetti nella mia architettura nelle prime fasi di implementazione.

Scrivo tutto solo per me stesso. E sembrerebbe che non ho intenzione di cambiare alcuni dati che non dovrei comunque. Ma il desiderio di proteggermi dalla mia stessa stupidità mi fa rivettare l'architettura OOP in modo tale che solo ciò che deve essere accessibile per cambiare. Il resto no. E qui i tipi const + inheritance sono di grande aiuto. Lo raccomando.
 
Dmitry Fedoseev:

Forse questa è una parte che viene data dai creatori agli utenti comuni. Come la funzione start nell'EA e le variabili Bid e Ask. Quando si fa tutto da soli, non ha senso preoccuparsi di tutti i tipi di costruttori.

Purtroppo, dobbiamo trascinare tutta questa zavorra per il bene della compatibilità. D'altra parte, i piccoli codici C e C++ vengono portati molto velocemente in MQL (questo è stato verificato molte volte).
 

Ho notato una tendenza interessante: nella stragrande maggioranza dei casi, quelli che non ne sanno nulla parlano della mostruosità dei plus. Per lo più affilatori, questo è tipico.

Sì, certo, Sharpe è migliore e più conveniente quando hai bisogno di fare qualcosa di dritto come un bastone).

 
zaskok3:
Non è un caso raro quando uso intenzionalmente questi costrutti:
Se non cambio i dati interni dell'oggetto e non mi applico ad esso, specifico il metodo come statico. Per me, usare const e static aumenta notevolmente la leggibilità/comprensione del mio codice. E spesso permette di catturare bug o difetti nella propria architettura in una fase iniziale dell'implementazione.
...

Oh, ragazzi. Abbiate pietà di MetaQuotes. Uno dei primi comandamenti di un programmatore: mai usare la statica. Secondo comandamento: se vuoi usare la statica, vedi il primo punto:)

Se i dati statici vengono cambiati da un thread mentre un altro li legge, appaiono tali meraviglie della programmazione multithreading, che si può ricordare questa statica come un brutto sogno.

Ma buono per gli utenti in MQL: nessun multithreading e, di conseguenza, nessun metodo cambierà i dati statici prima che un thread utente finisca di leggerli.

 
Vasiliy Sokolov:

Uno dei primi comandamenti di un programmatore: mai usare la statica. Secondo comandamento: se vuoi usare la statica, vedi il primo punto:)

Se i dati statici vengono cambiati da un thread mentre un altro li legge, appaiono tali meraviglie della programmazione multithreading, che si può ricordare questa statica come un brutto sogno.

Ancora una volta sono convinto che la discussione non funzionerà)
 
Комбинатор:

Ho notato una tendenza interessante: nella stragrande maggioranza dei casi, quelli che non ne sanno nulla parlano della mostruosità dei plus. Per lo più affilatori, il che è tipico.

Sì, certo, Sharp è meglio e più conveniente quando si deve fare qualcosa di dritto come un bastone).

Classico masa b plus: "Non ti piacciono i gatti? Solo che non sai come cucinarli".

No, non lo nego, C++ come nessun altro linguaggio può essere sintonizzato sugli standard di sviluppo. Ma finché non si arriva a questi standard si può essere uccisi con un tale rastrellamento che o si diventa un programmatore C++ veramente bravo o si rinuncia e si va alla 1C a fare biglietti ERP.

 
Vasiliy Sokolov:

Classica maschera da B+: "Non ti piacciono i gatti? È solo che non sai come cucinarli".

È così e basta).

Non ho nulla contro Sharp, sto scrivendo bot con esso, è comodo, veloce.

Non mi piace quando la gente getta fango su qualcosa che non lo merita e, inoltre, qualcosa che nessuno è necessariamente costretto a usare.

Questo vale sia per i contro che per i pro in generale.

 
Комбинатор:

È così e basta).

Non ho nulla contro Sharp, sto scrivendo bot in esso ora, è comodo, veloce.

Non mi piace quando la gente getta fango su qualcosa che non lo merita e inoltre qualcosa che nessuno è obbligato a usare obbligatoriamente.

Questo vale sia per i costruttori che per i professionisti in generale.

Ok, il mondo. È solo che le discussioni su C++ scendono sempre in una baraonda.

Z.U. Se qualcuno mi spiegasse qual è il problema di const, gliene sarei grato. Davvero non lo capisco.

 
Vasiliy Sokolov:

Alexey ha scritto l'esempio. Un metodo costante non può cambiare i membri della sua classe.

void bar(X& obj) const 
    {
        obj._x = 42; // OK! obj передается по ссылке и не имеет модификатора const
        _x = 42; // ERROR!
    }

Forse mi sfugge qualcosa, ma... qui. Alexey ha scritto che il metodo costante bar cambia l'oggetto della sua classe obj. Qual è il problema?

Sì, obj è passato per riferimento, ma il metodo non è ancora diventato costante...

 
Alexey Kozitsyn:

Forse mi sfugge qualcosa, ma... qui. Alexey ha scritto che il metodo costante bar cambia l'oggetto della sua classe obj. Qual è il problema?

Sì, obj è passato per riferimento, ma il metodo rimane comunque costante...

Non è il suo ma uno completamente estraneo, solo il tipo è lo stesso.