开发者_运维知识库What is an Anonymous Object exactly?
Does C++ support/have Anonymous Objects?
The C++ standard does not define the term "anonymous object", but it stands to reason that one might sanely use the term to describe any object that has no name:
- Temporaries:
f(T());
- Unnamed function parameters:
void func(int, int, int);
What I wouldn't count is dynamically-allocated objects:
Technically speaking, an "object" is any region of storage [1.8/1 in 2003], which would include the X bytes making up the integer dynamically-allocated by new int;
.
In int* ptr = new int;
the pointer (itself an object too, don't forget!) has the name ptr
and the integer itself has no name other than *ptr
. Still, I'd hesitate to call this an anonymous object.
Again, though, there's no standard terminology.
Note that anonymous object and anonymous class/type are different concepts. This post explains the latter.
This is a simplistic answer, but an anonymous object is basically an object which the compiler creates a class
for.
For example in C# (I know this is kinda irrelevant) you can just create an anonymous type by doing:
new { filename = value }
.
The compiler effectively creates a class called AnonSomething1
[A random name you don't know] which has those fields. Therefore at that point you just created an instance of that AnonSomething1
. C++ does not allow you to make anonymous class types inline (like Java and C# which have a base Object class which the anon types can derive).
However you can make an anonymous struct by simply writing
struct {
int field1;
std::string field2;
} myanonstruct;
which creates an anonymous struct and instantiates it with the alias myanonstruct
. This C++ code does not define a type, it just creates an anonymous one with 1 instance.
See C#: Anon Types
See Java: Anon Types
See C++ Structs: msdn
精彩评论