'struct' statt 'int'
-
Kuerzlich bin ich auf folgende Testfrage gestossen:
Warum wird man jemals schreiben:
struct S { int x; } anstelle von nur “int” ?z.B.
“void Foo(S);” oder “S Bar(S);”statt:
“void Foo(int);” or “int Bar(int)”
Wer hat eine Idee?
Thanks.
-
Die Frage verstehe ich nu nicht.
Anfür sich macht es keinen Sinn eine struct zu machen wo nur ein int verwendet wird.
Es sei denn:
Du weißt das weitere Member hinzukommen werden. (Das ist der Schnittstelle dann egal).
Oder die Struktur Methoden bekommt um etwas zu erfüllen.
-
Ich hätte da ein par mögliche Antworten:
-Der der die Frage geschrieben hat hat noch nichts von typedef gehört (eher unwahrscheinlich aber man weis nie...)
-Um später Upcasten zu können. Allerdings wäre dann eher class anstatt struct vewendet worden
-Um eine Vererbung möglich zu machen. Dies geht zum Beispiel nicht:class A:int{ };
Dies aber
class A:S{ };
-Um zu verhindern, dass man zu anderen build-in data typen implizit castet. Beispiel:
struct S{ int s; }; void B(double); //in einer Funktion S s1={5}; int s2=5; B(s1);//error B(s2);//ok
-Es ist einfacher im nachhinein Member hinzuzufügen.
-Um andere die dein Code lesen durcheinander zu bringen.
-Um zu erzwingen, dass Templates zweimal in der Exe anglegt werden müssen, einmal für S und einmal für int. Fals man dann at runtime in einer Codeversion rumbasteln will hat man immer noch die andere als Backup.So das wäre alles was mir jetzt eingefallen ist.
-
weil der Compiler besseres alignment erzeugen könnte
-
@kingruedi: ja? Jetzt hast mich neugierig gemacht...
-
Ich könnte mich höchstens vorstellen, dass ein Array aus:
struct Char { char c; }
durch Alignment schneller zu verarbeiten ist, weil alle Chars an bestimmten Grenzen ausgerichtet werden können. Ein einfaches Array aus char muss ja zusammen hängen.