Tôi đã nhìn vào SDK Fear cho dự án trường đại học của tôi, nhưng đã nhận thấy một số mã như vậy:Tại sao bao gồm tiêu đề và chuyển tiếp khai báo lớp chứa trong cùng một tệp cpp?
foo.h
class Foo
{
public:
int iSomething;
};
Bar.cpp:
#include "Foo.h"
// Forward declarations
class Foo;
Is có bất kỳ lý do cụ thể để chuyển tiếp khai báo và bao gồm các tiêu đề thích hợp trong cùng một tập tin cpp? Hoặc là tuyên bố chuyển tiếp dự phòng vì tiêu đề đang được bao gồm?
EDIT:
Mỗi lần tôi nhìn thấy nó trong mã, câu lệnh bao gồm luôn luôn trước khai báo chuyển tiếp.
Bạn có thể xây dựng không? Ban đầu tôi đã viết chính xác điều này, nhưng sau đó tôi nghĩ thêm một chút về nó và thấy rằng nếu thanh chuyển tiếp tuyên bố Foo, thì ngay lập tứC#includes Foo.h, nó nên a) luôn luôn dẫn đến việc khai báo Foo, và b) không bao giờ phụ thuộc vào một tiêu đề khác đã tuyên bố Foo. Bạn có thể đưa ra ví dụ về việc có khai báo chuyển tiếp trước khi #include thực sự giúp ích không? – mgiuca
@mgiuca - giảm thời gian biên dịch. đôi khi mã chỉ sử dụng con trỏ và không bao giờ yêu cầu kích thước thực của lớp [và không bao giờ tạo ra các cá thể].Trong những trường hợp đó, một khai báo chuyển tiếp đủ, giúp bạn tiết kiệm thời gian # include'ing các tệp khác. –
@Foo Bah Vâng, đó là lý do chính đáng để sử dụng tờ khai chuyển tiếp * thay vì * a #include. Nhưng nó không giải thích lý do tại sao bạn có cả hai. Nếu bạn có cả hai, bạn sẽ cần xử lý tệp được bao gồm, cho dù nó đã được sử dụng hay chưa. – mgiuca