2016-11-29 31 views
-1

我試圖用變量初始化一個結構體。但萬一我使用類型名稱=(值...)它只使用最後一個元素進行初始化。它不適合我,但我不知道它的未定義的行爲,編譯器錯誤或其他。我會除了一個錯誤消息或初始化更多的元素。structinit與兩個整數列表被簡化爲一個int

代碼:

struct funct { 
    funct(int i) 
    { 
     std::cout << "init with one\t" << i << std::endl; 
    } 
    funct(int i, int j) 
    { 
     std::cout << "init with two\t" << i << "\t" << j << std::endl; 
    } 
}; 

int main() { 
    funct tempa = funct(42); 
    funct tempb = 43; 
    funct tempc = funct(44, 45); 
    funct tempd = (46, 47); // thats the compiling thing 
    return 0; 
} 

輸出:

init with one 42 
init with one 43 
init with two 44  45 
init with one 47 

爲什麼會這樣,而不是與2或compileerrormessage初始化?

編譯:G ++(GCC)5.3.0

+1

COMMA OPERATOR。 –

+0

順便說一句,嘗試使用'{}'大括號而不是'()'括號。 http://rextester.com/XDDDLA10902 –

回答

1

像本說,這是造成問題的逗號操作符。通過

http://en.cppreference.com/w/cpp/language/operator_other#Built-in_comma_operator

在逗號表達E1,E2,E1被評估的表達,其結果被丟棄,並且其副作用的表達式的求值之前完成E2開始

正在執行a = (b,c)您正在有效設置a = c並丟棄b

+0

謝謝!該報價解釋了它對我來說非常完美,謝謝Ben也是 –

+0

不是問題,樂意提供幫助。如果您對答案感到滿意,可以將其標記爲已回答?幫助其他用戶看到正確的解決方案 – TomJ