簡體   English   中英

是否可以在C ++中使用匿名類?

[英]Is it possible to use anonymous classes in C++?

我在Quora上看過C++代碼中的匿名類 它已成功編譯並運行。

代碼在這里:

#include <iostream>

auto func()
{
    class // no name
    {
      public:
             int val;
    } a;

    a.val = 5;

    return a;
}

int main()
{
    std::cout << func().val << std::endl;
    return 0;
}

那么, 它在C ++中是否有效?

另外,我很想知道, 是否可以在C ++中使用匿名類?

不僅如此,您還可以使用decltype創建更多類的實例。

#include <iostream>

class 
{
   public:
      int val;
} a;


int main()
{
   decltype(a) b;
   a.val = 10;
   b.val = 20;

   std::cout << a.val << std::endl;
   std::cout << b.val << std::endl;
   return 0;
}

輸出:

10
20

在C ++中, 匿名聯合是這種形式的聯合:

 union { ... } ;

它定義了一個未命名類型的未命名對象。 它的成員被注入到周圍的范圍內,因此可以在不使用<object>.情況下引用它們<object>. 否則將是必要的前綴。

從這個意義上說,不存在匿名類(不是工會---在C ++聯合中是類)。

另一方面,未命名的類(包括結構和聯合)並不罕見。

union { ... } x;
class { ... } y;
typedef struct { ... } z;

xy是未命名類型的命名對象。 z是一個typedef-name,它是未命名結構的別名。 它們不是匿名的,因為這個術語是為上述形式的聯合保留的。

[](){}

Lambdas是未命名類類型的未命名對象,但它們也不稱為匿名。

總是可以這樣寫:

typedef struct { int a; } type;

現在,如果你看一下struct { int a }部分,這是一個匿名結構。 在C ++中,結構和類之間基本沒有區別(默認訪問修飾符除外)。 因此,可以使用匿名結構/類。

暫無
暫無

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

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