Что такое анонимный объект? - PullRequest
10 голосов
/ 16 марта 2011

Что такое анонимный объект?

Поддерживает / поддерживает ли C ++ анонимные объекты?

Ответы [ 2 ]

14 голосов
/ 16 марта 2011

Стандарт C ++ не определяет термин «анонимный объект», но вполне разумно использовать термин для описания любого объекта, который не имеет имени:

  • Временные значения: f(T());
  • Параметры функции без имени: void func(int, int, int);

То, что я не будет считать динамически распределяемыми объектами:

Технически говоря,«объект» - это любая область памяти [1.8 / 1 в 2003 году], которая будет включать в себя байты Х, составляющие целое число, динамически выделяемое new int;.

в int* ptr = new int; указателе (сам по себеобъект тоже, не забудьте!) имеет имя ptr, а само целое число не имеет имени, кроме *ptr.Тем не менее, я бы не стал называть этот объект анонимным.

Опять же, стандартной терминологии не существует.

3 голосов
/ 16 марта 2011

Это упрощенный ответ, но анонимный объект - это в основном объект, для которого компилятор создает class.

Например, в C # (я знаю, что это неважно) вы можете просто создать анонимный тип, выполнив:

new { filename = value }.

Компилятор эффективно создает класс с именем AnonSomething1 [Случайное имя, которое вы не знаете], который имеет эти поля. Поэтому в этот момент вы только что создали экземпляр этого AnonSomething1. C ++ не позволяет вам делать встроенные анонимные типы классов (например, Java и C #, которые имеют базовый класс Object, который могут извлекать типы anon).

Однако вы можете создать анонимную структуру, просто написав

struct { 
    int field1; 
    std::string field2; 
} myanonstruct; 

, который создает анонимную структуру и создает ее с псевдонимом myanonstruct. Этот код C ++ не определяет тип, он просто создает анонимный с 1 экземпляром.

См. C #: Типы Anon

См. Java: Типы Anon

См. C ++ Struct: msdn

...