schönes c++?



  • Schlimmer noch:
    ein generisches swap() geht in Java garnicht performant. Da muss man clone() 2 mal aufrufen. Sehr böse Sache sowas.

    swap() kann in Java immer nur das Objekt selber. Aber auch das funktioniert nur so halb, da du ja keine referenzen tauschen darfst (du weisst ja nicht wer aller handles darauf hat).

    Deshalb kopiert man in Java einfach. Sowas kommt halt davon wenn man sich C als Grundlage aussucht :p Aber das kopieren geht schnell genug, ist also mehr ein ästhetisches Problem denn ein praktisches.



  • Nexus schrieb:

    DEvent schrieb:

    Bytes zu swappen ist für mich low-level. Mir wäre es sogar lieber, wenn man in Java ganz auf primitive Typen verzichtet hätte.

    Ich wiederhole mich gerne nochmals:

    Nexus schrieb:

    Aber wieso zählst du swap() als Low-Level-Funktionalität?

    Es geht ja gar nicht um Bytes. Wenn man in Java einen Dreieckstausch macht, hat man nie mit Bytes oder Bits zu tun (in C++ übrigens auch fast nie). Trotzdem besitzt der Tausch zweier Objekte eine Semantik, die auch auf höherem Abstraktionslevel von Bedeutung sein kann.

    Natürlich bietet Java eine semantische swap() Funktion. Habe ich auch zwei Beispiele gegeben (einmal das mit der Wrapper-Klasse und einmal für das Beispiel von volkard). Es gibt halt keine swap() Funktion, die genauso wie in C/C++ aufgebaut ist, trotzdem kannst du Werte durch austauschen sortieren, oder die Teilbäume eines Baumgraphen vertauschen.

    Nexus schrieb:

    Das Inline-Schreiben des Tauschs über drei Zuweisungen ist meiner Ansicht nach eher Low-Level als ein swap() -Funktionsaufruf, weil die temporäre Variable ein Implementierungsdetail ist.

    In diesem Punkt abstrahiert C++ sogar besser, da es eine fertige Funktion für sowas anbietet und es dem Aufrufer egal sein kann, auf welche Weise zwei Objekte getauscht werden.

    Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.



  • DEvent schrieb:

    Natürlich bietet Java eine semantische swap() Funktion. Habe ich auch zwei Beispiele gegeben (einmal das mit der Wrapper-Klasse und einmal für das Beispiel von volkard).

    War beides kein swap.

    Es gibt halt keine swap() Funktion, die genauso wie in C/C++ aufgebaut ist

    nehmen wir man swap aus qbasic.

    trotzdem kannst du Werte durch austauschen sortieren, oder die Teilbäume eines Baumgraphen vertauschen.

    sinnigerweise mit ausgeschriebenem dreieckstausch. die anderen lösungen sind nicht hilfreich, sondern nur unfug.

    DEvent schrieb:

    Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.

    Ätsch. Besonderes Fachwissen ist das gemeinsame Merkmal der Anti-C++-Trolle.



  • volkard schrieb:

    DEvent schrieb:

    Natürlich bietet Java eine semantische swap() Funktion. Habe ich auch zwei Beispiele gegeben (einmal das mit der Wrapper-Klasse und einmal für das Beispiel von volkard).

    War beides kein swap.

    Wieso war beides kein swap?

    volkard schrieb:

    DEvent schrieb:

    Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.

    Ätsch. Besonderes Fachwissen ist das gemeinsame Merkmal der Anti-C++-Trolle.

    Hast du auch ein Link dafür?



  • DEvent schrieb:

    volkard schrieb:

    DEvent schrieb:

    Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.

    Ätsch. Besonderes Fachwissen ist das gemeinsame Merkmal der Anti-C++-Trolle.

    Hast du auch ein Link dafür?

    Ja http://www.c-plusplus.net/forum/viewtopic-var-t-is-254818-and-postdays-is-0-and-postorder-is-asc-and-start-is-0.html



  • DEvent schrieb:

    Wieso war beides kein swap?

    http://en.wikipedia.org/wiki/Swap_(computer_science)



  • DEvent schrieb:

    Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.

    Dir mag vieles an C++ neu sein. Ja, die Sprache ermöglicht ein einfach anzuwendendes swap() , ganz im Gegensatz zu Java, wo sich für einen generischen Tausch eine Inline-Lösung immer noch am meisten lohnt.

    P.S.: Nein, ich habe grundsätzlich nichts gegen Java. Aber die ganze Zeit oberflächlich von High-Level-Sprache zu sprechen und Probleme, die Low-Level-Workarounds erfordern, damit rechtzufertigen ist etwas fragwürdig.



  • volkard schrieb:

    DEvent schrieb:

    Die Sprache C++ bietet eine swap-Funktion oder swap-Konstrukt? Das ist mir neu.

    Ätsch. Besonderes Fachwissen ist das gemeinsame Merkmal der Anti-C++-Trolle.

    er meint ja die sprache. hat er extra kursiv geschrieben, nicht irgendwelche funktionen einer library (auch wenn sie dabei ist).
    btw, kennt einer eigentlich ein sinnvolles beispiel, bei dem objekte selbst geswappt werden müssen? eigentlich reichts doch immer, wenn man referenzen rumschubst anstatt objektinhalte auszutauschen.
    🙂



  • §25.2.2. Also gehörts zur Sprache. Klugscheißer.



  • volkard schrieb:

    DEvent schrieb:

    Wieso war beides kein swap?

    http://en.wikipedia.org/wiki/Swap_(computer_science)

    Nach dieser Definition frag ich mich überhaupt ob eine Funktion in eine funktionale Programmiersprache überhaupt Swap heissen darf. XD



  • Wie ist das eigentlich wieder zu einem weiteren Java vs. C++ - Thread geworden?
    Ob Java oder nun C++ besser ist, stand eigentlich nie zur Debatte.



  • Michael E. schrieb:

    §25.2.2. Also gehörts zur Sprache. Klugscheißer.

    Clauses 2 through 16 describe the C++ programming language. That description includes detailed syntactic specifications in a form described in 1.6. For convenience, Annex A repeats all such syntactic specifications.

    Clauses 17 through 27 (the library clauses) describe the Standard C++ library, which provides definitions for the following kinds of entities: macros (16.3), values (clause 3), types (8.1, 8.3), templates (clause 14), classes (clause 9), functions (8.3.5), and objects (clause 7).



  • Nanyuki schrieb:

    Wie ist das eigentlich wieder zu einem weiteren Java vs. C++ - Thread geworden?
    Ob Java oder nun C++ besser ist, stand eigentlich nie zur Debatte.

    dabei enthält des OPs posting genug hinweise zum ablästern über c++, ohne dass man Java überhaupt erwähnen müsste. echt schwache vorstellung diesmal. *fg*
    🙂



  • Daniel E. schrieb:

    Michael E. schrieb:

    §25.2.2. Also gehörts zur Sprache. Klugscheißer.

    Clauses 2 through 16 describe the C++ programming language. That description includes detailed syntactic specifications in a form described in 1.6. For convenience, Annex A repeats all such syntactic specifications.

    Clauses 17 through 27 (the library clauses) describe the Standard C++ library, which provides definitions for the following kinds of entities: macros (16.3), values (clause 3), types (8.1, 8.3), templates (clause 14), classes (clause 9), functions (8.3.5), and objects (clause 7).

    da hast du's michael E. <-- selber klugscheisser.
    🙂



  • Dann hast du wohl wieder im Erbsenzählen gewonnen. Herzlichen Glückwunsch. Da kann keiner mithalten. Klugscheißer.



  • ;fricky schrieb:

    kennt einer eigentlich ein sinnvolles beispiel, bei dem objekte selbst geswappt werden müssen?

    naja z.b. beim sortieren von arrays etc.

    eigentlich reichts doch immer, wenn man referenzen rumschubst anstatt objektinhalte auszutauschen.

    in C++ arbeitet man wo es geht mit value-semantics, und nicht mit reference-semantics, weil's einfach schneller ist (weil keine/weniger dynamische speicheranforderungen z.b.).



  • Michael E. schrieb:

    Dann hast du wohl wieder im Erbsenzählen gewonnen. Herzlichen Glückwunsch. Da kann keiner mithalten. Klugscheißer.

    naja du hast ja wohl mit erbsenzählen angefangen. die unterscheidung sprache <-> library ist zumindest für mich total klar, und somit auch klar dass std::swap nicht zur sprache gehört.



  • hustbaer schrieb:

    ;fricky schrieb:

    kennt einer eigentlich ein sinnvolles beispiel, bei dem objekte selbst geswappt werden müssen?

    naja z.b. beim sortieren von arrays etc.

    ok, aber swappen innerhalb von arrays ist ja in Java kein problem (^^hab weiter oben ein beispiel gezeigt).

    hustbaer schrieb:

    eigentlich reichts doch immer, wenn man referenzen rumschubst anstatt objektinhalte auszutauschen.

    in C++ arbeitet man wo es geht mit value-semantics, und nicht mit reference-semantics, weil's einfach schneller ist (weil keine/weniger dynamische speicheranforderungen z.b.).

    wieso schneller? umschaufeln der speicherinhalte ganzer objekte kann doch nicht schneller sein, als das umhängen von referenzen.
    🙂



  • Die value-semantics sagt aus wie man dem Assignment-Operator zur interpretieren hat und nicht ob ich nun den Wert oder die Referenz swappe.
    Weil template <class T> void swap(T& x,T& y) kann ich SmartPointer übergeben und Sematisch werden ist das halt ein Referenztausch, oder - versteh ich C++ zu schlecht?



  • Zeus schrieb:

    Weil template <class T> void swap(T& x,T& y) kann ich SmartPointer übergeben und Sematisch werden ist das halt ein Referenztausch, oder - versteh ich C++ zu schlecht?

    ich verstehe von c++ wahrscheinlich viel weniger als du, aber für mich sieht das so aus, als sollen die inhalte von x und y selbst getauscht werden. sind x und y nun ziemlich grosse objekte, dürfte so'n tausch verdammt ungeil sein. sind x und y pointer, wäre es viel schneller. deswegen ja (immer noch) meine frage: wann ist es sinnvoll, objektinhalte selbst zu swappen anstatt referenzen (oder pointer).
    und noch 'ne frage: da man ja nicht einfach rohen speicher rumschaufeln sollte (wie Nexus z.b. erzählt hat), wie funktioniert so'n tausch überhaupt? bei nichttrivialen objekten müssten es doch tiefe kopien werden. sowas macht C++ ja nicht automatisch (Java aber kann das, hähä). müssen die objekte 'swappable' sein, oder wie läuft das?
    🙂


Anmelden zum Antworten