簡體   English   中英

類型別名中的詳細類型說明符

[英]Elaborated type specifier in type alias

為什么下面的代碼沒有硬錯誤? 類型別名和類名完全相同(編譯器clang ):

using S = struct S;

struct S {};

S s;

int main()
{
}

以下代碼(符號或類型別名)中變量定義中確切使用的名稱是哪個?

using S = struct S {};

int main()
{
    S s;
}
  1. 第一個是 C 的保留,其中標記命名空間(結構/聯合/枚舉)與類型命名空間(typedef 和內置類型)完全分開。
    在 C++ 中,該規則很寬松,因此如果 typename-namespace 中沒有任何內容,則會自動搜索 tag-namespace。

  2. 第二個是通過考慮第一個的答案來回答的:
    找到類型名。

下面的代碼使S成為名為S結構體的別名。 using S重新定義了名稱S作為一個別名struct S

using S = struct S;

下面的行定義了struct S

struct S {};

下面的聲明,使用S其作為別名S通過使用制備。

S s;

至少可以說,這類似於

using K = struct S;

struct S { S(){ std::cout << "Constructed!\n"; } };

K s;

int main()
{    }

代碼將打印:

Constructed!

基本上,名稱K將被struct S替換。


對於您的第二個示例,它本質上與 C 的typedef相同:

typedef struct C {} C;

這在 C++ 中是多余的

暫無
暫無

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

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