簡體   English   中英

我無法理解c ++中的結構聲明

[英]I can't understand the structure declaration in c++

在C中,每當我們想要聲明或定義結構時,我們必須使用結構前綴。 但是,一旦結構成為c ++中的一類,事情就會發生變化。 我們在聲明結構時不再需要使用struct前綴。 在這種情況下,我猜C的結構標記成為C++類型的名稱。

但是,這並不意味着我們不能使用struct前綴。 我們仍然可以使用struct前綴。 例如,c ++的創建者Bjarne Stroustrup引入了一個聲明帶有和不帶struct前綴的結構的例子,這讓我感到困惑。

下面是嘗試使用模板參數T創建結構的結構定義。這些編譯正常,沒有錯誤。

template<class T> struct linked_list {
    T element;
    linked_list<T> *next;
};
template<class T> struct linked_list {
    T element;
    struct linked_list<T> *next;
};

現在,下面是函數聲明,其返回類型和參數類型是結構。 即使這些與上面沒有什么不同,第一個從下面的兩個函數聲明,一個帶結構前綴,給我一個錯誤的Visual Studio c ++ 2012

template<class T> struct linked_list<T> *add_list(T element, struct linked_list<T> *tail);
template<class T> linked_list<T> *add_list(T element, linked_list<T> *tail);

我真的不明白事情是如何運作的。 我不明白這些聲明之間的區別。 誰能給我一個詳細的解釋?

除了在C中,在C ++中,如果沒有模糊性,可以省略struct (和class )關鍵字。 如果存在歧義,您仍然必須使用struct關鍵字。 一個臭名昭着的例子是POSIX的stat :有一個struct stat和一個函數stat 在這里,您始終必須使用struct stat來引用類型。

當你自己解釋時,你似乎很清楚。 在C ++中,關鍵字struct與關鍵字class相同,但默認為public而不是private成員。 因此,使用struct關鍵字聲明了一個類,然后在引用該類時不再使用它。 您似乎正在嘗試使用struct,因為它將在第一個示例中用於C語言。 這與C ++不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM