2013-07-17 22 views
7

Kod ten został opublikowany w http://accu.org/index.php/cvujournal, wydanie lipiec 2013 nie mogłem pojąć wyjścia, każde wyjaśnienie byłoby helphfulJaki jest wynik tego kodu?

#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; 
} 

wyjściowa:

--C1 
0 

Spodziewałem:

--C2 
42 

Jakiekolwiek wyjaśnienie?

+2

'void load() {i y (x); } 'wyprowadza to, czego się spodziewałeś. – Derek

+0

Albo, prościej: 'i {x};' – chris

+0

@chris Działa tylko w C++ 11, prawda? – Derek

Odpowiedz

20

i(x); odpowiada i x; z nadmiarowym nawiasach wyrzuconych To pozwala określić zmienną nazwaną x typu i, domyślne inicjowany.; nie tworzy tymczasowej instancji o wartości i z x jako parametrem konstruktora. Zobacz także: most vexing parse

Powiązane problemy