5 回答

TA貢獻1796條經(jīng)驗 獲得超4個贊
C ++中有一些有趣的邊緣情況(其中一些也在C中)??紤]
T t;
這可以是定義或聲明,具體取決于類型T:
typedef void T();
T t; // declaration of function "t"
struct X {
T t; // declaration of function "t".
};
typedef int T;
T t; // definition of object "t".
在C ++中,使用模板時,還有另一種邊緣情況。
template <typename T>
struct X {
static int member; // declaration
};
template<typename T>
int X<T>::member; // definition
template<>
int X<bool>::member; // declaration!
最后一個聲明不是定義。它是靜態(tài)成員的明確特化的聲明X<bool>。它告訴編譯器:“如果要實例化X<bool>::member,那么不要從主模板中實例化成員的定義,而是使用在別處找到的定義”。要使其成為定義,您必須提供初始化程序
template<>
int X<bool>::member = 1; // definition, belongs into a .cpp file.

TA貢獻1877條經(jīng)驗 獲得超6個贊
宣言
聲明告訴編譯器存在程序元素或名稱。聲明將一個或多個名稱引入程序。聲明可以在程序中多次出現(xiàn)。因此,可以為每個編譯單元聲明類,結(jié)構(gòu),枚舉類型和其他用戶定義的類型。
定義
定義指定名稱描述的代碼或數(shù)據(jù)。必須先聲明名稱才能使用它。
- 5 回答
- 0 關(guān)注
- 879 瀏覽
添加回答
舉報