2016-07-18 2 views
10

Есть ли разница в любом аспекте (синтаксическое ограничение, производительность и т. Д.) Между двумя следующими определениями?Typedef анонимного класса

using Foo = struct { int a, b, c; }; 

struct Foo { int a, b, c; }; 

(Я спрашиваю потому, что первая форма эстетически более равномерным, если положить среди множества using деклараций.)

EDIT: Пост связан в комментарии не совсем ответ мой вопрос. Меня больше беспокоит то, как эти два определения отличаются в терминах использования, тогда как этот пост в основном отвечает на то, как они отличаются друг от друга, ну, что они собой представляют, я думаю.

+1

А, возможно, будет, когда Reflection TS достигнет плодов. – chris

+0

duplicate: https://stackoverflow.com/questions/612328/difference-between-struct-and-typedef-struct-in-c – user2176127

+0

@ user2176127 Нет, взгляните на мое редактирование. –

ответ

13

Вот некоторые различия я могу думать:

  • (очевидно) Вы не можете объявлять никаких конструкторов, деструктор или оператор присваивания для безымянного класса.
  • Вы не можете переадресовать безымянный класс, в том числе в качестве друга другого класса.
  • Вы не можете отметить неназванный класс final.
  • struct Foo может быть объявлен в той же декларативной области, что и функция или переменная с именем Foo, хотя, очевидно, вы не должны этого делать. using Foo = ... не позволяет вам эту свободу.
+4

Также: «(§ 9.4.2.4 [class.static.data]). Разнообразные классы и классы, содержащиеся прямо или косвенно в неназванных классах, не должны содержать статических членов данных». – AndyG

+0

@ AndyG Clang кажется [разрешить] (http://coliru.stacked-crooked.com/a/fd7e45aec6546ba30), но не gcc. – 0x499602D2

+1

Можете ли вы также не использовать 'struct Foo' для ссылки на класс? – immibis

Смежные вопросы