什么是匿名对象?
C ++是否支持/拥有匿名对象?
答案 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