I have seen anonymous classes in C++
code on Quora. It's successfully compiled and run.
Code here:
#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;
}
So, Is it valid in C++?
Also, I am curious to know, Is it possible to use anonymous classes in C++?
Not only that, you can create more instances of the class by using
decltype
.Output:
It was always possible to write something like this:
Now, if you look at
struct { int a }
part, this is an anonymous struct. In C++, there's basically no difference between structs and classes (Except the default access modifiers). So, it's possible to have anonymous structs/classes.In C++, an anonymous union is a union of this form:
It defines an unnamed object of an unnamed type. Its members are injected in the surrounding scope, so one can refer to them without using an
<object>.
prefix that otherwise would be necessary.In this sense, no anonymous classes (that are not unions --- in C++ unions are classes) exist.
On the other hand, unnamed classes (including structs and unions) are nothing unusual.
x
andy
are named object of unnamed types.z
is a typedef-name that is an alias for an unnamed struct. They are not called anonymous because this term is reserved for the above form of a union.Lambdas are unnamed objects of unnamed class types, but they are not called anonymous either.