2013-07-17 10 views
7

Questo codice è stato pubblicato nel http://accu.org/index.php/cvujournal, numero di luglio 2013. non riuscivo a capire l'uscita, ogni spiegazione sarebbe helphfulQual è l'output del seguente codice?

#include <iostream> 
int x; 

struct i 
{ 
    i() { 
     x = 0; 
     std::cout << "--C1\n"; 
    } 

    i(int i) { 
     x = i; 
     std::cout << "--C2\n"; 
    } 
}; 

class l 
{ 
public: 
    l(int i) : x(i) {} 

    void load() { 
     i(x); 
    } 

private: 
    int x; 
}; 

int main() 
{ 
    l l(42); 
    l.load(); 
    std::cout << x << std::endl; 
} 

uscita:

--C1 
0 

mi aspettavo:

--C2 
42 

Qualsiasi spiegazione?

+2

'void load() {i y (x); } 'restituisce ciò che ti aspettavi. – Derek

+0

O, più semplicemente, 'i {x};' – chris

+0

@chris Funziona solo per C++ 11, giusto? – Derek

risposta

20

i(x); è equivalente a i x;, con una coppia ridondante di parentesi gettato in Si dichiara una variabile denominata x di tipo i, default-inizializzata.; non crea un'istanza temporanea di i con x come parametro del costruttore. Vedi anche: most vexing parse

Problemi correlati