What is an Anonymous Object?

末鹿安然 提交于 2019-11-26 23:09:40

问题


What is an Anonymous Object exactly?

Does C++ support/have Anonymous Objects?


回答1:


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.




回答2:


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



来源:https://stackoverflow.com/questions/5330287/what-is-an-anonymous-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!