Typedef анонимного класса
Есть ли какая-либо разница в любом аспекте (синтаксическое ограничение, производительность и т.д.) между двумя следующими определениями?
using Foo = struct { int a, b, c; };
struct Foo { int a, b, c; };
(Я спрашиваю, потому что первая форма является эстетически более однородной, когда помещается в много объявлений using
.)
EDIT: Сообщение, связанное с комментарием, точно не отвечает на мой вопрос. Меня больше беспокоит то, как эти два определения различаются в плане использования, тогда как этот пост в основном отвечает на то, как они отличаются друг от друга, ну, что они собой представляют, я думаю.
Ответы
Ответ 1
Вот некоторые отличия, которые я могу придумать:
- (очевидно) Вы не можете объявить какие-либо конструкторы, деструктор или оператор присваивания для неназванного класса.
- Вы не можете переадресовать объявить неназванный класс, в том числе в качестве друга другого класса.
- Вы не можете отметить неназванный класс
final
.
-
struct Foo
может быть объявлен в той же декларативной области, что и функция или переменная с именем Foo
, хотя, очевидно, вы не должны этого делать. using Foo = ...
не позволяет вам эту свободу.