什么是匿名对象?

时间:2011-03-16 18:53:07

标签: c++ visual-c++ c++11 standards

什么是匿名对象?

C ++是否支持/拥有匿名对象?

2 个答案:

答案 0 :(得分:14)

C ++标准没有定义术语“匿名对象”,但是有理由认为可以使用该术语来描述任何没有名称的对象:

  • 临时工:f(T());
  • 未命名的函数参数:void func(int, int, int);

不会计算的是动态分配的对象:

从技术上讲,“对象”是任何存储区域[2003年的1.8 / 1],其中包括构成由new int;动态分配的整数的X字节。

int* ptr = new int;中,指针(本身也是一个对象,不要忘记!)的名称为ptr,整数本身没有*ptr以外的名称。不过,我会毫不犹豫地将其称为匿名对象。

但是,再一次,没有标准的术语。

答案 1 :(得分:3)

这是一个简单的答案,但匿名对象基本上是编译器为其创建class的对象。

例如在C#中(我知道这有点无关紧要)你可以通过这样做来创建一个匿名类型:

new { filename = value }

编译器有效地创建了一个名为AnonSomething1 [一个你不知道的随机名称]的类,它有这些字段。因此,此时您刚刚创建了AnonSomething1的实例。 C ++不允许您内联匿名类类型(如Java和C#,它们具有anon类型可以派生的基础Object类)。

但是,只需编写

即可创建匿名结构
struct { 
    int field1; 
    std::string field2; 
} myanonstruct; 

创建一个匿名结构并使用别名myanonstruct对其进行实例化。这个C ++代码没有定义类型,只是创建一个带有1个实例的匿名代码。

请参阅C#:Anon Types

参见Java:Anon Types

请参阅C ++结构:msdn