msc*_*msc 24 c++ g++ class c++11 c++14
我已经看到匿名类在C++
上Quora的代码.它已成功编译并运行.
代码在这里:
#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;
}
Run Code Online (Sandbox Code Playgroud)
那么,它在C++中是否有效?
另外,我很想知道,是否可以在C++中使用匿名类?
R S*_*ahu 32
不仅如此,您还可以使用创建更多类的实例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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
10
20
Run Code Online (Sandbox Code Playgroud)
n. *_* m. 19
在C++中,匿名联合是这种形式的联合:
union { ... } ;
Run Code Online (Sandbox Code Playgroud)
它定义了一个未命名类型的未命名对象.它的成员被注入到周围的范围中,因此可以在不使用<object>.
其他必要的前缀的情况下引用它们.
从这个意义上讲,不存在匿名类(不是工会---在C++联合中是类).
另一方面,未命名的类(包括结构和联合)并不罕见.
union { ... } x;
class { ... } y;
typedef struct { ... } z;
Run Code Online (Sandbox Code Playgroud)
x
并且y
是未命名类型的命名对象.z
是一个typedef-name,它是未命名结构的别名.它们不是匿名的,因为这个术语是为上述形式的联合保留的.
[](){}
Run Code Online (Sandbox Code Playgroud)
Lambdas是未命名类类型的未命名对象,但它们也不称为匿名.
nak*_*iya 10
总是可以这样写:
typedef struct { int a; } type;
Run Code Online (Sandbox Code Playgroud)
现在,如果你看一下struct { int a }
,这是一个匿名结构.在C++中,结构和类之间基本没有区别(默认访问修饰符除外).因此,可以使用匿名结构/类.