Kích thước của class này là gì và tại sao?


+1 Phiếu
Đã hỏi 12/5/2016 bởi Ovg5538 (477,960 điểm)
Tôi có hai lớp như sau
class A
{
};
class B
{
    int a[];
};

int main()
{
    cout << sizeof(A) <<endl;      //outputs 1
    cout << sizeof(B) <<endl;      //outputs 0
    return 0;
}
tôi quen thuộc các kích thước của trống class là 1, nhưng tại sao kích thước của class B đến để là ZERO??

2 Câu trả lời

0 Phiếu
Đã trả lời 27/5/2016 bởi Vg_2132 (250 điểm)
Your code is ill-formed as far as C++ language is concerned. In particular, the class B shouldn't compile in C++ Standard Conformant compiler. Your compiler has either bug, or it provides this feature as extension. GCC with -pedantic-errors -std=c++11 gives this error:
cpp.cpp:18:11: error: ISO C++ forbids zero-size array 'a' [-Wpedantic]
     int a[];
           ^
Đã bình luận 29/5/2016 bởi gb_The (620 điểm)
Ngoài ra, 'cout' không phải là cái gì bạn đã viết cho mình, là nó? Ý tôi là, tôi thấy có bằng chứng về namespace tiêu chuẩn được sử dụng...
0 Phiếu
Đã trả lời 27/5/2016 bởi hcgee (500 điểm)
GCC giấy phép mảng không dài như là một phần mở rộng: http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html và:
như một quirk thực hiện ban đầu của mảng zero-length, sizeof đánh giá bằng không.
Đã bình luận 28/5/2016 bởi Am_mallo (1,850 điểm)
class 'B' không biên dịch.
Đã bình luận 29/5/2016 bởi Fbz357to (620 điểm)
§8.3.4.1 nếu liên tục biểu thức (5.19) là hiện nay, nó sẽ là một expression liên tục không thể thiếu và value của nó sẽ lớn hơn 0.
Đã bình luận 29/5/2016 bởi Juv3236Ute (880 điểm)
@ pushE compiler đó là bạn đang sử dụng và phiên bản?

ToughDev Q&A là gì?

Trang web hỏi đáp cho các bạn đam mê lập trình, phát triển phần mềm và các vấn đề kỹ thuật khác. Với sự giúp đỡ của bạn, chúng tôi hy vọng sẽ xây dựng thành công một thư viện đầy đủ các câu hỏi và trả lời về tất cả các vấn đề có liên quan đến lập trình!







...