2017-05-02 14 views
10

Các segfaults sau mã theo gcc-4.9, 5.4, và 6.3 với std = C++ 11, nhưng biên dịch và chạy tốt dưới kêu vang-3.7, và VS2015 Cập nhật 3.lỗi gcc với lambda chụp này trong danh sách khởi tạo với thừa kế ảo?

struct A 
{ 
    int Func() { return x++; } 
    int x = 5; 
}; 

struct B 
{ 
    B(int) {} 
}; 

struct Derived : public virtual A, public B 
{ 
    Derived() 
     : A() 
     // , B(this->Func()) // This works! 
     , B([this](){ return this->Func(); }()) // But this segfaults. 
    { 
    } 
}; 

int main() 
{ 
    Derived c; 
} 

này một lỗi trong Is gcc? Xóa thừa kế ảo sửa lỗi segfault.

+5

'this' đề cập đến một thể hiện của' Derived'. Nhưng không có 'Derived' cho đến khi xây dựng của nó thực sự bắt đầu, tuy nhiên,' this' cần được đánh giá để xây dựng lớp cơ sở, nhưng cho đến khi tất cả các lớp cơ sở được xây dựng, không có 'Derived'. Hành vi không xác định. –

+0

@SamVarshavchik: Bạn nên viết nó như là một câu trả lời trích dẫn tiêu chuẩn. Như vậy sẽ tốt hơn !!! – Destructor

+0

Tôi thực sự đã cố gắng để tìm một cái gì đó, nhưng, sau một vài phút tìm kiếm tôi thực sự không thể tìm thấy bất cứ điều gì. Tôi đoán cho đến khi lambdas đến xung quanh bạn không thể có một tình huống mà bạn có thể có một 'this' trước khi đối tượng thực sự tồn tại; do đó điều này không được viết một cách rõ ràng. –

Trả lời

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