2013-07-17 171 views
7

這段代碼被刊登在http://accu.org/index.php/cvujournal,公佈7月2013年 我無法理解的輸出,任何的解釋是helphful以下代碼的輸出是什麼?

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

輸出:

--C1 
0 

我期待:

--C2 
42 

任何解釋?

+2

'void load(){i y(x); }'輸出你所期望的。 – Derek

+0

或者更簡單地說,'我{x};' – chris

+0

@chris只適用於C++ 11,對吧? – Derek

回答

20

i(x);相當於i x;,具有一對冗餘拋出括號它聲明瞭一個名爲i類型,默認初始化的x變量。它不會創建i的臨時實例,其中x作爲構造函數的參數。另見:most vexing parse