c++ aufräumen



  • also ich weiß nicht wie das anderen anfängern geht aber bei mir ist das problem mit c++ mittlerweile dass viele veraltete sachen noch gehen oder es viele verschiedene möglichkeiten gibt dinge zu tun

    zB in manchen büchern die ich habe fängt es noch so an

    #<include iostream.h>

    später hieß es dann das ist veraltet man nehme doch bitte
    <iostream>
    using namepace std;

    bis vor kurzem habe ich noch nicht einmal gewusst dass es
    std::TR1::Array
    (bei groß/kleinschreibung grad nicht sicher)
    gibt
    mehr beispiele möchte ich jetzt nicht geben...

    irgendwie kommt mir c++ sehr unaufgeräumt und unorganisiert vor

    irre ich mich da und es fällt den profis gar nicht mehr auf
    oder hat noch jede datei / libtrary ihre daseinsberechtigung??



  • ja, glaub nicht



  • iostream.h war eine Bibliothek vor dem Standard - und man kann sie immer noch verwenden. Es sind dann eben nicht die "standard" iostreams, sondern eine veraltete Version.

    Der namensraum tr1:: ist etwas, was erst vor kurzem eingefügt wurde. tr1 ist quasi ein Test-Namensraum.

    oder hat noch jede datei / libtrary ihre daseinsberechtigung??

    leider ja - und seien es nur kompatibilitätsgründe mit altem C/C++ code.



  • Das hat nichts mit der Sprache zu tun, sondern mit der Implementierung. (sprich Compiler). Der kann dir natürlich mehr erlauben, als die Sprache eigentlich erlaubt. Allerdings weiss ich nicht, woher du gewisse Konstrukte hast..
    C++ ist case Sensitiv. Das heisst, dass Gross/Kleinschreibung eine Rolle spielt. Da gibt es afaik keine Ausnahmen. Wenn es doch geht (oder zumindest so scheint), dann wird es da einen Wrapper geben. Also z.B eine Datei, die in Klein und Grosbuchstaben vorliegt. (habe ich aber noch nie gesehen und fände es sehr schwachsinnig..)

    Die beiden Beispiele sind völliger Mist und dürften so von keinem C++ Compiler kompiliert werden.



  • bis vor kurzem habe ich noch nicht einmal gewusst dass es
    std::TR1::Array
    (bei groß/kleinschreibung grad nicht sicher)

    hast du schon irgendwo eine klasse der std.-library gesehen in deren namen grossbuchstaben vorkommen?
    🙄



  • nunja hier soll nicht über meine blödheit diskutiert werden sondern eher um das was ich als kern betrachte nämlich dass es sehr viele veraltete dateien gibt und testnamensräume und überhaupt

    vielleicht fällt jemandem ein besseres beispiel ein?



  • shisha schrieb:

    nunja hier soll nicht über meine blödheit diskutiert werden sondern eher um das was ich als kern betrachte nämlich dass es sehr viele veraltete dateien gibt und testnamensräume und überhaupt

    Testnamensraum ist nicht das richtige Wort. TR1 ist Teil des Standards von 2003, ist aber noch nicht überall verbreitet. Und was soll veraltet sein? Dateien aus der C-Standardbibliothek?

    shisha schrieb:

    vielleicht fällt jemandem ein besseres beispiel ein?

    Wir wissen ja gar nicht, was du meinst. Und du scheinst dich nicht sehr auszukennen, wie auch hustbaers Hinweis zeigt. Der erste Eindruck eines Anfängers ist aber nicht unbedingt ein gutes Argument. Vielleicht gelingt es dir ja, bessere zu finden.



  • otze schrieb:

    iostream.h war eine Bibliothek vor dem Standard - und man kann sie immer noch verwenden.

    Man kann sie verwenden, wenn sie der Compiler anbietet! Laut Standard müssen sie aber nicht vorhanden sein, und dann kann man sie auch nicht nutzen, wenn der Compiler sie nicht drin hat.

    Mein Compiler kennt sie jedenfalls nicht mehr:

    MSVC 2005 schrieb:

    fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory

    Ein Anfänger brauch von diesen Sachen überhaupt nichts zu wissen. Sie sind praktisch in C++ nicht existent.



  • shisha schrieb:

    nunja hier soll nicht über meine blödheit diskutiert werden sondern eher um das was ich als kern betrachte nämlich dass es sehr viele veraltete dateien gibt und testnamensräume und überhaupt

    Welche veralteten dateien oder testnamensräume? Was kann der C++-Standard dafür, wenn Du veraltete Literatur liest, die dir NICHT den Standard beibringt? Jede seriöse C++-Literatur von Heute wird von iostream.h kein Wort verlieren, da es nie im Standard existierte.

    Und TR1 ist kein Testnamensraum. Es ist ein Standard bzw. eine Standard-Erweiterung, die hoch offiziell als ISO-Papier existiert. Und jede seriöse C++-Literatur von Heute wird dich über TR1 aufklären. Tut sie das nicht, ist das die Schuld des Buchautors, und nicht des Standards.

    Kramt nicht in veralteten Büchern und Tutorials, sondern in seriöse Literatur, dann werdet ihr auch nicht verwirrt werden.



  • shisha schrieb:

    zB in manchen büchern die ich habe fängt es noch so an

    #<include iostream.h>

    später hieß es dann das ist veraltet man nehme doch bitte
    <iostream>
    using namepace std;

    Ehm, stimmt nicht. Im Standard steht nicht drin, das man <iostream.h> vergessen soll. Dieser Header stand da nämlich nie drin, somit kann er auch nicht von "vergessen" sprechen. <iostream.h> ist eine freiwillige Datei vor dem C++-Standard gewesen. Tut aber, wenn wir vom ISO-C++ aka C++ reden, nichts zur Sache. Wer seit 1998 (erschien ISO-C++) immernoch mit <iostream.h> ankommt, sollte in seine Höhle zurück kriechen!

    shisha schrieb:

    bis vor kurzem habe ich noch nicht einmal gewusst dass es
    std::TR1::Array

    TR1 gibt es doch erst seit 2006. Wenn du seriöse Bücher, die nach 2006 neu aufgelegt wurden, kaufst, müsstest du darüber etwas erfahren. In einem 2006er Buch verständlicherweise noch schwierig, das ein Buchautor den endgültigen TR1 voraussehen konnte. Ein wenig realistisch und fair sollte man schon bleiben.



  • Ich kann gut nachvollziehen, dass die ganze C++-Action mit Pre-Standard, Standard '98, boost, TR1, C++09, TR2 und was-weiß-ich-noch sehr verwirrend sein kann. Plus, dass bekannterweise jede Menge beschissener Bücher auf dem Markt sind.



  • ja an der schlechten literatur wird es wohl liegen müssen,
    ist ja schön und gut dass sachen wie <iostream.h> nie standard waren
    bloß woher soll ich das wissen
    als ich mich 2002 das erste mal mit c++ befasst habe habe ich mir das buch

    c++ das einsteigerseminar gekauft
    von: niemann und heitsiek
    bhv-verlag
    erschienen : 2002

    darin wird noch mit iostream.h gearbeitet
    dass das nicht gut ist kann ich als käufer ja nicht wissen...

    auch dinge wie initialisierungslisten werden mit keiner einzigen silbe erwähnt

    und jetzt bitte keine diskussion darüber dass 2002 schon wieder lange her ist, ok?

    ich finde es halt nur verwirrned dass sich einige miner bücher selbst widersprechen



  • Wie gesagt, C++ kann nichts dafür, dass massenhaft schlechte Bücher existieren. Ist das somit geklärt oder findest du wirklich Punkte, die dir unaufgeräumt/chaotisch scheinen? Es gäbe da vielleicht schon gewisse Dinge, auch im neuen Standard...



  • shisha schrieb:

    ich finde es halt nur verwirrned dass sich einige miner bücher selbst widersprechen

    Dann sollten dir die Aussagen in diesem Thread ja schonmal gute Hinweise gegeben haben welche der Bücher du umweltfreundlicherweise der Altpapierverwertung zuführen kannst 😉



  • pumuckl schrieb:

    welche der Bücher du umweltfreundlicherweise der Altpapierverwertung zuführen kannst 😉

    Es gibt Dinge, bei denen man Ausnahmen machen kann und der Nachwelt in möglichst keiner Form hinterlassen sollte und somit ist es durchaus moralisch vertretbar den besagten Gegenstand zu verbrennen. :p



  • shisha schrieb:

    ich finde es halt nur verwirrned dass sich einige miner bücher selbst widersprechen

    Willkommen in der Wirklichkeit!



  • Bulli schrieb:

    Und TR1 ist kein Testnamensraum. Es ist ein Standard bzw. eine Standard-Erweiterung, die hoch offiziell als ISO-Papier existiert.

    Nein, ist es nicht:

    C++ Technical Report 1 (TR1) is the common name for ISO/IEC TR 19768, C++ Library Extensions, which is a document proposing additions to the C++ standard library. The additions include regular expressions, smart pointers, hash tables, and random number generators. TR1 is not a standard itself; formally it's a draft document. However, most of its proposals are likely to become part of the next official standard. In the meantime, vendors can use this document as a guide to create extensions. The report's goal is "to build more widespread existing practice for an expanded C++ standard library."

    http://en.wikipedia.org/wiki/Technical_Report_1


  • Administrator

    @otze,
    Also das was du zitierst hast, das würde ich in Deutsch in etwa so zusammenfassen, was Bulli geschrieben hat.
    - Es ist ein offizielles ISO-Papier

    ISO/IEC TR 19768

    - Es ist eine Standard-Erweiterung (kein Standard, sondern eine Erweiterung)

    ..., which is a document proposing additions to the C++ standard library.

    TR1 is not a standard itself; formally it's a draft document.

    Es kommt natürlich jetzt drauf an, wie genau man draft wirklich übersetzen möchte:
    http://dict.leo.org/ende?lp=ende&lang=de&searchLoc=0&cmpType=relaxed&sectHdr=on&spellToler=on&chinese=both&pinyin=diacritic&search=draft&relink=on

    Oder versteh ich das falsch? 🙂

    Grüssli



  • ..., which is a document proposing additions to the C++ standard library.

    ...das ein Dokument ist, welches Erweiterungen der Standardbibliothek vorschlägt

    most of its proposals are likely to become part of the next official standard.

    Die meisten der Vorschläge werden wahrscheinlich Teil des nächsten offiziellen Standards.

    und die Übersetzung von "draft" ist in diesem Kontext immer nur "Entwurf" oder "Konzept". Deswegen wird, wenn hier der link zum C++ standard gebracht wird immer mindestens einmal gesagt: "Das ist nicht der Standard, das ist nur der draft".

    //edit Wikipedia wird sogar noch genauer:

    Compilers need not include the TR1 components to be conforming, as the TR1 proposals are not yet officially part of the standard.



  • www.iso.org schrieb:

    ISO/IEC TR 19768:2007 specifies a series of extensions to the standard library for the programming language C++, as specified by ISO/IEC 14882, in order to build more widespread existing practice for an expanded C++ standard library. Some of the components in ISO/IEC TR 19768:2007 could be considered for standardization in a future version of C++.

    Es ist ein offizielles ISO dokument dass Erweiterungen der C++ Standard Library spezifiziert. Alles hoch offiziell.



  • Am offiziell hänge ich mich ja auch nicht auf. Woran ich mich aufhänge, sind aber formulierungen wie diese dort:

    Some of the components in ISO/IEC TR 19768:2007 could be considered for standardization in a future version of C++.

    Mit anderen Worten: Sie sind nicht standartisiert. Also kein Teil von C++(im Gegensatz zur STL oder anderen standartisierten Komponenten).

    //edit
    Hinzu kommt, die Art, wie der TR1 angekündigt wurde(bzw wie Stroustrup und andere über ihn gesprochen haben). Ich kann das jetzt nicht mehr durch einen Link belegen, aber ich meine, dass der Wortlaut in etwa so ging:

    "Wir wollen den TR1 rausgeben, um die Wartezeit bis zum nächsten Standard zu verkürzen und damit sich die Programmierer auf die kommenden Neuerungen einzustimmen. Natürlich geben wir keine Garantie, dass auch nur irgendwas davon so in den endgültigen Standard einzug haben wird, aber wir sind uns ziemlich sicher"

    damit ist das Ding nicht Teil von C++(auch wenn es offiziell ist), es ist nicht sicher, dass auch nur irgendeiner der Vorschläge durch kommt, und alles in allem ist das nur spielerei => quasi-Testnamensraum. Einfach mal ausprobieren, ob das klappt.


Anmelden zum Antworten