[英]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;
x
和y
是未命名類型的命名對象。 z
是一個typedef-name,它是未命名結構的別名。 它們不是匿名的,因為這個術語是為上述形式的聯合保留的。
[](){}
Lambdas是未命名類類型的未命名對象,但它們也不稱為匿名。
總是可以這樣寫:
typedef struct { int a; } type;
現在,如果你看一下struct { int a }
部分,這是一個匿名結構。 在C ++中,結構和類之間基本沒有區別(默認訪問修飾符除外)。 因此,可以使用匿名結構/類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.