2013-06-05 17 views
7

Qualche giorno fa, durante la lettura Standard C++ news ho letto il post sulla Defaulted functions in C++11, in tale articolo viene menzionato che il costruttore definito dall'utente è meno efficiente di quello generato dal compilatore:I costruttori predefiniti definiti dall'utente sono meno efficienti?

L'definito dall'utente il costruttore predefinito è meno efficiente del costruttore predefinito definito dal compilatore implicitamente.

Continuando la lettura, c'è un esempio in cui un costruttore definito dall'utente è contrassegnato come di default, e poi dice:

l'esplicito come insolvente costruttore è più efficiente di un costruttore di default programmato manualmente.

Non capisco queste affermazioni, quindi mi chiedevo:

  • Perché un costruttore predefinito dall'utente (o funzione membro speciale) sarebbe meno efficiente rispetto al compilatore implicitamente quello definito?
  • In che modo viene migliorata l'efficienza impostando esplicitamente un costruttore (o una funzione membro speciale)?
  • Quali linee guida devo seguire per scegliere di default un costruttore (o una funzione membro speciale) e come l'efficienza influisce su questa decisione?
+0

http://stackoverflow.com/questions/4275861/why-would-the-implicitly-generated-constructor-et-al-be-more-efficient-than-a?rq = 1 – shivakumar

+0

Buono uno @shivakumar ma entrambe le domande non hanno ancora una risposta accettata, anche quella che hai menzionato dal 2010! : O –

risposta

3

penso che una dichiarazione migliore è che un costruttore di default definito dall'utente PUÒ essere meno efficiente di un compilatore ha generato fuori.

Ad esempio, quando genera internamente un costruttore predefinito, il compilatore può essere in grado di formulare supposizioni e ottimizzazioni che non è in grado di apportare a un contstructor definito dall'utente (gli effetti collaterali vengono in mente).

Inoltre, tenere presente che un costruttore predefinito definito dall'utente potrebbe eseguire un lavoro completamente diverso rispetto a quello predefinito, costruendo tutti i suoi membri, risultando meno efficiente (ma anche più corretto). Questo non sembra essere il caso nel link che hai fornito comunque.

+0

* "Ricorda anche che un costruttore predefinito definito dall'utente potrebbe eseguire un lavoro completamente diverso rispetto a quello predefinito, costruendo tutti i suoi membri" * - Certo, ma suppongo che il caso sia fuori discussione comunque. Ma buon punto su possibili ottimizzazioni su larga scala. –

0

E tutti sappiamo, che se è scritto su internet, allora deve essere giusto ... Aspetta, no?

Nell'articolo in cui ho trovato la prima affermazione di meno efficiente, l'autore dice la verità. Sebbene tu sembri interpretarlo erroneamente - nell'esempio si riferisce al ctor che usa la mano usa l'incarico. Per nessuna buona ragione, e andando contro le linee guida vecchie di 2 anni.

In seguito, stesso caso. (Come nota pratica io aggiungere, che per ogni compilatore affermando di avere ottimizzazioni mi aspetto la stessa uscita assy anche per quella forma ...)

non vedo alcuna ragione per cui il corretta ctor scritto a mano sarebbe stato diverso da quello predefinito in qualsiasi modo, compresa l'efficienza. OTOH se sono identici perché mai lo scrivono? Sono troppo felice che il compilatore lo faccia per me. E alla fine riesco persino a controllarlo in qualche modo che prima non potevo. Potrebbe usare più di tali funzioni. ;-)

+0

"* E sappiamo tutti che, se è scritto su internet, deve essere corretto *" Suppongo che debba essere corretto a causa del font;) è per questo che menziono il font. –

Problemi correlati