Ottimizzare C++/Ottimizzazione del codice C++/Costruzioni e distruzioni: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Gian BOT (discussione | contributi)
m Bot: sostituisce source con syntaxhighlight
 
Riga 47:
Viene mostrata dal seguente codice, nel quale <code>C</code> rappresenta il nome della classe, e <code>swap</code> una funzione membro che dovrà essere definita:
 
<sourcesyntaxhighlight lang=cpp>
C& C::operator=(C new_value) {
swap(new_value);
return *this;
}
</syntaxhighlight>
</source>
 
=== Overload per evitare conversioni ===
Riga 60:
Supponiamo di aver scritto la seguente funzione:
 
<sourcesyntaxhighlight lang=cpp>
int f(const std::string& s) { return s[0]; }
</syntaxhighlight>
</source>
 
il cui scopo è consentire di scrivere il segueente codice:
 
<sourcesyntaxhighlight lang=cpp>
std::string s("abc");
int n = f(s);
</syntaxhighlight>
</source>
 
Tale funzione può però essere usata anche dal seguente codice:
 
<sourcesyntaxhighlight lang=cpp>
int n = f(string("abc"));
</syntaxhighlight>
</source>
 
E, grazie alla conversione implicita da <code>char*</code> a <code>std::string</code>, può essere usata anche dal seguente codice:
 
<sourcesyntaxhighlight lang=cpp>
int n = f("abc");
</syntaxhighlight>
</source>
 
Entrambe le due ultime chiamate alla funzione <code>f</code> sono inefficienti, perché creano un oggetto temporaneo <code>std::string</code> non vuoto.
Riga 87:
Per mantenere l'efficienza della prima chiamata dell'esempio, si dovrebbe definire anche la seguente funzione in overload:
 
<sourcesyntaxhighlight lang=cpp>
int f(const char* s) { return s[0]; }
</syntaxhighlight>
</source>
 
In generale, se una funzione è chiamata passandole un argomento di un tipo non consentito ma che può venire implicitamente convertito a un tipo consentito, viene creato un oggetto temporaneo del tipo consentito.