2016-03-08 20 views
6
#include<iostream> 
using namespace std; 

class C{ 
private: 
    int value; 
public: 
    C(){ 
     value = 0; 
     cout<<"default constructor"<<endl; 
    } 
    C(const C& c){ 
     value = c.value; 
     cout<<"copy constructor"<<endl; 
    } 
}; 
int main(){ 
    C c1; 
    C c2 = C(); 
} 

uscita:C'è qualche differenza tra C c; e C c = C() ;?

costruttore di default

costruttore di default

Domanda:

Per C c1; predefinita costruttore sarà chiamato, ovviamente, per C c2 = C(); ho pensato costruttore di default sarà chiamato per inizializzare un oggetto temporaneo ct, quindi il costruttore della copia sarà chiamato per inizializzare c2, sembra che io abbia torto. perché?

+5

Parole chiave: ottimizzazione del valore di ritorno, copia elisione. –

+3

Perché il compilatore è più intelligente di quanto si pensi. –

+0

Parole chiave: * inizializzazione valore *, * inizializzazione copia *. – juanchopanza

risposta