【发布时间】:2017-10-25 16:54:27
【问题描述】:
我在 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++ 中使用匿名类?
【问题讨论】:
-
有点像asked before
-
C++ 有anonymous unions,但没有匿名类/结构,一些编译器将其作为扩展提供。尽管如此,问题中显示的未命名类仍然有效。
-
@cpplearner an anonymius union 是一个没有名称(成员,而不是类型)的联合类型的类 member。
-
@n.m 通常是一个“匿名”类/联合意味着既没有名称,也没有实例化的对象。它的成员成为封闭类范围或函数块范围的成员。一个未命名的类仅仅意味着没有名字,但除此之外它是一个带有立即声明对象的普通类。 C++ 没有匿名类,只有匿名联合。
-
@JohannesSchaub-litb 我刚刚在标准中查找了它,它说匿名联合是联合的一种特殊形式,它定义了一个未命名类型的未命名对象。假设它只能是另一个类的成员,我错了。