2013-03-06 61 views
2

在任何頭文件中只定義一個類而不包含包含這樣的類的整個頭文件的目的是什麼?在任何頭文件中只定義一個類而不包含包含這樣的類的整個頭文件的目的是什麼?

例如,我在一些頭髮現,有一些類的聲明中有這樣的:

#include "blabla.h" 
#include "mehmeh.h" 
class myClass; 

/* 

Some code using myClass 

*/ 

什麼是使用這種聲明的目的是什麼?

+0

提示:*「Thanks in - > advance < - 對於任何評論」* – 2013-03-06 03:17:49

+1

主要優點是編譯時間比包含頭文件花費的時間短,因爲編譯器知道它存在但不必填寫在它不需要的所有細節中。 – chris 2013-03-06 03:20:10

+0

我編輯過的文本要一致地使用「聲明」而不是混合「聲明」和「定義」。這兩者是相關的,但**不可**互換。 '類MyClass;'是一個聲明,而不是一個定義。 – 2013-03-06 12:50:38

回答

2

這是一個類的前向聲明。它使您可以定義指向您定義的類的指針和引用,而無需拉動整個定義。

最重要的理由這樣做是當你不能做任何其他方式,由於循環引用:

class Parent; 
class Child { 
    Parent *parent;  // Child must reference Parent 
    string name; 
}; 
class Parent { 
    Child *children[32]; // Parent must reference Children 
}; 

另一個原因是加快編譯:包括一個大型頭只需申報指針可能會顯着減慢編譯速度。

4

它被稱爲forward declaration它可以讓你告訴編譯器有一個具有該名稱的類型,但頭文件不需要知道關於該類型的細節。

這減少了頭文件中的包含並減少了編譯時間。

1

ISO/IEC 14882,1st,3.9.6:「已聲明但尚未定義的類或未知大小或不完整元素類型的數組是一種未完全定義的對象類型。並且未完成定義的對象類型的實例的佈局未知。「

K & R 2nd,p212:「不完整類型的對象......可能在不需要它們[具體]尺寸的上下文中提及。」

對於不透明指針,Cheshire Cat,pimpl等等,或者實際上不需要解除引用,不需要或可能甚至不可能的任何上下文都有用。

相關問題