'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.


Anmelden zum Antworten