sizeof() in C++?



  • gibt es in C++ eine Methode die
    dem sizeof() aus ANSI C entspricht?
    Schon mal Danke für eure Hilfe
    mit freundlichen Grüßen
    sizeof() 🙂



  • sizeof() wird ebenfalls in C++ benutzt. Allerdings wüsste ich jetzt keinen wirklichen Einsatzzweck dafür.

    Was willst du denn machen?



  • Ich möchte in einer Datei
    eine Zeile zwei mal einlesen.
    Die variablen unterscheiden sich aber vom Datentyp,
    also dachte ich mir einmal ein file >> i_zahl;
    dann file.seekg (-sizeof(i_zahl), ios::cur);
    und file >> s_string;

    Aber da wir kein C++ mit ANSI C Code vermischen sollen,
    habe ich jetzt nach einer C++ Methode für sizeof(); gesucht 🙂

    Wäre das ganze auch mit einem cast möglich?



  • Janjan schrieb:

    sizeof() wird ebenfalls in C++ benutzt. Allerdings wüsste ich jetzt keinen wirklichen Einsatzzweck dafür.

    Was willst du denn machen?

    Einsatzzwecke dafür gibt es schon. Es wird in üblichem C++ Code eher wenig angetroffen, aber es gibt z.B ein paar Hacks, welche damit nette Sachen erlauben. Wenn man Speicher selbst verwaltet ist es auch sehr nützlich.



  • Da liegt ein Denkfehler vor. In der Datei steht die Zahl als Plain Text, d.h. Ziffer für Ziffer, und nicht im Binärformat. Der Plaintext kann zwischen 1 und 10 Zeichen lang sein (bei 32Bit Integer Zahlen, wobei sizeof( int ) für 32Bit Integer 4 zurückliefert. Dein Vorhaben funktioniert also nur für Zahlen von 1000-9999 und dreistelligen Vorzeichenbehafteten Zahlen.
    Lies die Zeile komplett in einen string und werte den string zweimal aus.



  • dein seekg würde nicht das machen was du erwartest. sizeof(i_zahl) gibt die Anzahl bytes zurück die deine Zahlvariable im Speicher belegt. Das ist wahrscheinlich nicht die Anzahl der Zeichen, die die lesbare Darstellung dieser Zahl in der Datei belegt.
    Ich würd einfach erst den String aus der Datei lesen, dann mit einem stringstream diesen String in eine Zahl verwadeln - schon hast du sowohl die Zahl als auch die Zeichendarstellung.



  • Janjan schrieb:

    sizeof() wird ebenfalls in C++ benutzt. Allerdings wüsste ich jetzt keinen wirklichen Einsatzzweck dafür.

    Wie erwähnt gibt es schon ein paar Einsatzzwecke, allerdings vor allem im Low-Level-Bereich. Einige findet man jedoch auch auf sehr hohem Abstraktionslevel, beispielsweise kann man im Zusammenhang mit Template(meta)programmierung man ein paar interessante Nebeneffekte des sizeof -Operators ausnutzen. Dieser erlaubt es, einen vollständig bekannten Typ sicherzustellen (für Smart-Pointer-Destruktoren von essentieller Bedeutung) oder Metafunktionen zur Erkennung von Konvertierbarkeit und Klassenhierarchien zu schreiben (dafür braucht man übrigens noch was Ungewöhnliches: Die Ellipse). Vielleicht meinte drakon sogar das mit den netten Hacks... 😉

    Wie auch immer, für das Problem hier ist sizeof jedenfalls der falsche Ansatz.


  • Administrator

    sizeof() schrieb:

    Aber da wir kein C++ mit ANSI C Code vermischen sollen,
    habe ich jetzt nach einer C++ Methode für sizeof(); gesucht 🙂

    Nur zur Klarstellung:
    sizeof ist im C++ Standard explizit vorhanden, gehört also zur Sprache C++ 😉

    DocShoe schrieb:

    Lies die Zeile komplett in einen string und werte den string zweimal aus.

    pumuckl schrieb:

    Ich würd einfach erst den String aus der Datei lesen, dann mit einem stringstream diesen String in eine Zahl verwadeln - schon hast du sowohl die Zahl als auch die Zeichendarstellung.

    Oder man kann auch mit tellg die aktuelle Position speichern, auslesen und danach mit seekg wieder zur vorherigen Position springen. Man sollte aber nicht vergessen, die Eingabe zu prüfen, ob sie erfolgreich war 🙂

    Grüssli



  • Oder man kann auch mit tellg die aktuelle Position speichern, auslesen und danach mit seekg wieder zur vorherigen Position springen. Man sollte aber nicht vergessen, die Eingabe zu prüfen, ob sie erfolgreich war 🙂

    super so werd ich es machen 😃

    Nochmal vielen Dank für eure Hilfe und
    die ganzen Tips 🙂



  • Janjan schrieb:

    sizeof() wird ebenfalls in C++ benutzt. Allerdings wüsste ich jetzt keinen wirklichen Einsatzzweck dafür.

    Och da gibt's aber einiges.
    Angefangen vom Byte-Klauben mit PODs über Templates (z.B. ermitteln der "optimalen" Anzahl der Page-Grösse einer std::deque o.ä.) bis zu ganz wilden Geschichten ala boost::optional.
    Und natürlich das allseits beliebte sizeof(array)/sizeof(array[0]) .


Anmelden zum Antworten