-Code unten kompiliert und arbeitet sowohl in Visual Studio und g ++:Ungültige Verwendung von unvollständigem Typ, Referenz vs Zeiger
class A;
A* getRef(void);
char (&func(...))[2];
int main() {
bool isDefault = sizeof(func(getRef()))==2;
std::cout << isDefault << std::endl; //prints 1
return 0;
}
Next Code noch kompiliert (und Werke) in Studio, aber g ++ Staaten ist dies invalid use of incomplete type 'class A'
:
Ist dies ein grundlegend falscher Code, der von einem Compiler abgelehnt werden sollte (und wenn ja, warum VS Compiler keine Warnungen erzeugt)? Oder gibt es tatsächlich einen Unterschied zwischen Zeigern und Referenzen in diesem Zusammenhang, die mir nicht bekannt sind?
@Franck, das OP versucht nicht, 'sizeof (A &)' zu bekommen. 'A &' ist ein Argument für 'func'. –
@RSahu Leider habe ich den 'func' Anruf verpasst. – Franck
@RSahu: Aber der Verweis (auf unvollständigen Typ) wird als tatsächliches Argument für ein Auslassungsargument verwendet. Und das macht es ein bisschen subtil. –