array = array ??



  • Original erstellt von Lars:
    Ist genau dasselbe wie mit memcpy und std::copy

    Nein. algorithm enthält 'bei mir'¹ allerhand Templatefunktionen die der Compiler instantieren darf, iostream ein paar spezialisierte Deklarationen (und bedingt die libc++, die ich ja sicher schon sowieso dazu linken wollte; wenn nicht, dann auch kein cout, sondern was anderes).

    Muss ich mir jetzt auch 'ne unpassende Analogie ausdenken? Warum?

    1): Ja, das hat im C++-Forum nichts verloren.



  • Hmm haste schon wegeditiert 😃



  • und danach hat ein Moderator die [..editiert]-Anzeigen wegeditiert 😉



  • eben 😃



  • Im Gegensatz zu einer Schleife?

    Nein. Im Gegensatz zu std::memcpy. Aber danke der Nachfrage.

    Aber ich habe ja diese sinnlose Abstraktion von strlen, strcpy, copy & Friends noch nie verstanden ... und das ist mein voller Ernst.

    Naja, wäre die Abstraktion sinnlos, würde ich sie wohl auch nicht verstehen. Da sie das aber nicht ist...

    Aber nach dieser Aussage ist jede weitere Diskussion irgendwie sinnlos. Man braucht ja schließlich irgendeinen gemeinsamen Einstiegspunkt.



  • Was heißt eigentlich "intrinsic"???



  • @MaSTaH
    Darf ich dich an die Erfindung des Wörterbuchs erinnern?

    intrinsic - inner, immanent, innerhalb

    immanent - einbegriffen, innewohnend



  • Original erstellt von HumeSikkins:
    Darf ich dich an die Erfindung des Wörterbuchs erinnern?

    Darfst du 😉 . Ich hab es hier im Forum das erste Mal gehört und dachte es sei irgendein Fachbegriff... Deswegen habe ich es nicht im Wörterbuch nachgeschlagen.



  • Original erstellt von MaSTaH:
    Deswegen habe ich es nicht im Wörterbuch nachgeschlagen.

    *grml*
    wenigstens googlen könnte man



  • Hab ich doch, aber der hat nur Mist gefunden. Erst dann habe ich gefragt...





  • Ich hab aber nur den Begriff ohne Functions eingegeben, daran lag es dass er nur Mist gegoogled hat 🙄



  • //keine Schleife, kein memcpy, kein std::copy
    template <class T,int S>struct StructWithOnlyArray{T array[S];};
    #define COPY(src,dst,cnt) new(dst)StructWithOnlyArray<typeof(*dst),cnt>(*(StructWithOnlyArray<typeof(*src),cnt>*)src);
    

    [ Dieser Beitrag wurde am 22.03.2003 um 12:18 Uhr von klausmuell editiert. ]



  • das geht aber nur auf gcc und intern wird da sowieso so was wie memcpy benutzt



  • Original erstellt von Dimah:
    das geht aber nur auf gcc und intern wird da sowieso so was wie memcpy benutzt

    es wird genau das optimale verwendet. bei kleinen arrays ein paar direkte zuweisungen, bei größeren memcpy, aber wenn nichttriviale kopiersemantik vorliegt ne schleife mit copy-ctor, und das alles kostenlos und ohne schlimme #includes und mit voller compilermagie.



  • Naja, jedem das seine



  • Original erstellt von klausmuell:
    bei kleinen arrays ein paar direkte zuweisungen, bei größeren memcpy, aber wenn nichttriviale kopiersemantik vorliegt ne schleife mit copy-ctor, und das alles kostenlos und ohne schlimme #includes und mit voller compilermagie.

    Erstens sind Templates nie kostenlos (so wie das bei vielen Compilern implementiert ist), zweitens trift der Compiler für mich fragwürdige Entscheidungen über mein Programm ohne Kenntnis der Umgebung (Wann ist den ein Array klein?), drittens habe ich eine natürliche Abneigung gegenüber magischen Vorlängen und zum Vierten braucht man beim GCC den Header <new> und die einzig mir bekannte Möglichkeit den einzubinden ist #include.

    Original erstellt von HumeSikkins:
    Naja, wäre die Abstraktion sinnlos, würde ich sie wohl auch nicht verstehen. Da sie das aber nicht ist...

    Eine komplizierte Lösung mit redundanten Details ist immer schlechter als eine Direkte Klare Einfache. Das finde ich zumindest einleuchtend, aber alle moderen Bücher die sich mit OOP und OOD beschäftigen erzählen mir fortwährend das Gegenteil.



  • erstens ist das forum buggy, weil es nur den text nach dem letzten quote quotet, statt alles ungeuotete.
    zweitens ist es buggy, weil es mir beim registrieren nicht den benutzernamen Klaus gegeben hat, sondern meinen login, weil Klaus weg war und ich nun nicht selber zu Klausi oder so wechseln kann.

    Erstens sind Templates nie kostenlos (so wie das bei vielen Compilern implementiert ist),

    also laufzeitkosten haben sie schonmal nicht.

    zweitens trift der Compiler für mich fragwürdige Entscheidungen über mein Programm ohne Kenntnis der Umgebung (Wann ist den ein Array klein?),

    wer sollte diese entscheidungen denn sonst treffen? die lib weiß ja nichtmal, auf welchen prozessor der code optimiert werden soll und ob du kleinen oder schnellen code haben willst.

    drittens habe ich eine natürliche Abneigung gegenüber magischen Vorlängen

    freust dich aber über ein intrinsic memcpy? memcpy ist bereits magisch und macht bei kleinen arrays und bekannter fester größe ne zuweisung, später evtl nur repne mov und noch später total tolle auf bestes alignment hin getrimmte duff-devices?

    und zum Vierten braucht man beim GCC den Header <new> und die einzig mir bekannte Möglichkeit den einzubinden ist #include.

    ok, das placement new. normalerweise ist eh was schon eingebunden, das wiederum <new> einband. aber wenn ichs mal brauche und nicht inkludieren mag, ich glaube, dies muss da stehen:

    inline void* operator new(size_t,void* p){return p;}
    


  • Original erstellt von klausmuell:
    zweitens ist es buggy, weil es mir beim registrieren nicht den benutzernamen Klaus gegeben hat, sondern meinen login, weil Klaus weg war und ich nun nicht selber zu Klausi oder so wechseln kann.

    Schreib ne Mail an Marc++us er kann sicherlich deinen nick ändern.



  • inline void* operator new(size_t,void* p){return p;}

    Wofür du wiederum einen der Header einbinden musst, die size_t definieren 😉
    Ist aber auch egal. Solange in dem Code ein typeof steht und solange Standard-C++ kein typeof kennt, ist der Code hier sowieso falsch.

    Eine komplizierte Lösung mit redundanten Details ist immer schlechter als eine Direkte Klare Einfache. Das finde ich zumindest einleuchtend, aber alle moderen Bücher die sich mit OOP und OOD beschäftigen erzählen mir fortwährend das Gegenteil.

    Tut mir leid ich kann dir nicht folgen. Ich sehe beim Besten Willen nicht was das mit OOP und OOD zu tun haben soll. Selbst gute Bücher von 1970 (da gab es meines Wissens noch keinen OOP-Hype) sagen: "Duplication is the root of all evil". Und 250-mal die selbe Schleife in einem Programm zu schreiben ist definitiv "duplication". Länger, fehleranfälliger, schlechter wartbar (da weniger kommunikativ) als eine simple Funktion.
    Nicht nur, dass eine Schleife keine High-Level-Semantik besitzt, sie wird auch natürlich nicht nach einer solchen geprüft.
    Also habe ich strcpy vielleicht 249mal richtig und einmal falsch implementiert. Toll. Passiert dir vielleicht nicht, mir schon.

    [ Dieser Beitrag wurde am 22.03.2003 um 18:12 Uhr von HumeSikkins editiert. ]


Anmelden zum Antworten