Gibt es einen Unterschied zwischen der Definition des Tag-Typs als anonyme leere Struktur oder als leere Struktur?
%Vor% In meinen Augen ist der einzige Unterschied der Name des "effektiven" Typs, wenn man eine Art der Reflexion verwendet (d. h. __PRETTY_FUNCTION__
, <cxxabi.h>:abi::__cxa_demangle(typeid().name())
usw.).
ADL funktioniert in beiden Richtungen:
%Vor% Abgesehen von den verschiedenen Zeichenketten, die Sie bereits bemerkt haben, besteht der einzige wesentliche Unterschied darin, dass Sie mit einem elaborated-type-specifier auf B
verweisen können, sodass Sie stattdessen struct B b;
sagen können von B b;
, aber Sie können struct A a;
nicht verwenden, da A
ein typedef-name ist, kein Klassenname.
Allerdings gibt es fast nie einen guten Grund, struct B
anstatt nur B
zu sagen, daher ist in der Praxis der Unterschied nicht wichtig, besonders nicht für Tag-Typen.