2013-07-17 37 views
7

Mã này đã được công bố trong http://accu.org/index.php/cvujournal, Số tháng bảy năm 2013. Tôi không thể hiểu được đầu ra, bất kỳ lời giải thích sẽ là helphfulĐầu ra của mã sau là gì?

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

Output:

--C1 
0 

tôi đã mong đợi:

--C2 
42 

Bất kỳ giải thích nào?

+2

'void load() {i y (x); } 'xuất ra những gì bạn mong đợi. – Derek

+0

Hoặc, đơn giản hơn, 'i {x}; ' – chris

+0

@chris Chỉ hoạt động với C++ 11, phải không? – Derek

Trả lời

20

i(x); tương đương với i x;, với một cặp thừa ngoặc ném vào Nó tuyên bố một biến tên là x loại i, mặc định khởi tạo. nó không tạo ra một cá thể tạm thời của i với tham số x làm tham số của hàm tạo. Xem thêm: most vexing parse

Các vấn đề liên quan