2010-11-08 20 views
7

Câu hỏi của tôi liên quan đến Prasoon 's question về loại POD không và khởi tạo giá trị.Ideone và Codepad có thực sự không hỗ trợ C++ 03 không?

Tôi đã thử mã sau đây trên các trình biên dịch trực tuyến như Ideone và Codepad nhưng các tệp thi hành đã cung cấp lỗi thời gian chạy trên cả hai trang web.

#include <iostream> 
#include <cassert> 

struct Struct { 
    std::string String; 
    int Int; 
    bool k; 
}; 

struct InStruct:Struct 
{ 
    InStruct():Struct(){} 
}; 

int main() 
{ 
    InStruct i; 
    assert (i.Int == 0); 
    std::cout << "Hello"; 
} 

Ideone Output here
Codepad Output here

Liệu đó có nghĩa là cả hai đều không hỗ trợ C++ 03 tính năng khởi tạo giá trị?

Trả lời

4

Liệu đó có nghĩa là cả hai đều không hỗ trợ C++ 03 tính năng khởi tạo giá trị?

Có.

Trước phiên bản 4.4, GCC không hỗ trợ hoàn toàn việc khởi tạo giá trị (the Boost GCC compatibility header giải thích điều này và có liên kết đến báo cáo lỗi GCC liên quan; xem dòng 77).

Nếu mã của bạn cần phải di động, bạn nên rất cẩn thận dựa vào việc khởi tạo giá trị; GCC không hỗ trợ đầy đủ cho đến gần đây và Visual C++ không hỗ trợ đầy đủ ngay cả trong phiên bản mới nhất của nó, Visual C++ 2010.

0

Việc kê khai

InStruct i; 

không gọi giá trị khởi tạo

$ 8.5.3/10 - "Một đối tượng có initializer là một tập rỗng của ngoặc đơn, tức là,(), có trách nhiệm được khởi tạo giá trị. "

Nếu bạn muốn giá trị khởi tạo, bạn sẽ đòi hỏi một cái gì đó biểu hiện như

assert(InStruct().Int == 0); 
+0

O O. một người nào đó bị bỏ qua nhưng quên nhận xét – Chubsdad

+2

'InStruct' có một hàm tạo mặc định. –

+0

@James McNellis: Nhưng lớp cơ sở 'Struct' không (mà là 'Int') – Chubsdad

0

Hãy thử it ngay bây giờ! - Ideone hỗ trợ GCC-4.5.1

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