Eventuali duplicati:
What’s the motivation behind having copy and direct initialization behave differently?Perché l'inizializzazione della copia è così com'è? Perché richiedere il costruttore di copie?
E per l'inizializzazione copia, voglio dire in questo modo:
struct MyStruct
{
MyStruct(int) {}
MyStruct(const MyStruct&) {}
};
MyStruct s = 5; // needs *both* the int and copy constructor
Nonostante la programmazione in C++ per anni, non ho mai capito il codice qui sopra richiesto il costruttore di copie (grazie a jogojapan). Il temporaneo era sempre stato eliso, e come tale non lo sapevo nemmeno nemmeno esisteva (almeno a livello superficiale, nonostante fosse ottimizzato) finché non mi venne indicato.
Dopo una discreta quantità di googling, ho avuto l'idea di come funziona. La mia domanda è perché è così com'è?
Perché lo standard non lo ha fatto in modo che l'esempio precedente non abbia bisogno del costruttore di copie? C'è qualche caso/esempio specifico che dimostra che è necessario il costruttore di copie in questo tipo di inizializzazione?
Senza una spiegazione decente di perché le cose sono come sono, vedo solo questo come un artefatto fastidioso, ma preferisco non essere ignorante se c'è qualcosa di importante che mi manca.
sembra che necessitano di costruttore di copia è per omonimo; in realtà è [non chiamato] (http://ideone.com/35fjAD). – iammilind
@iammilind: Non è necessario chiamare è dovuto a ** Copia elision **, ma il costruttore di copie deve essere accessibile. Fondamentalmente, significa che lo standard * consente * di chiamare il costruttore di copie e che ** deve ** essere disponibile. L'Ottimizzazione non è standard garantita, anzi, è il contrario che lo standard soddisfa. –
@JesseGood: Grazie per quello. Sembra che questo sia praticamente un duplicato. Un po 'deprimente non c'è una buona risposta su quell'altra domanda ... – Cornstalks