Warum hat C++ so eine aufwendige Syntax?



  • Undertaker schrieb:

    Mr. N schrieb:

    Undertaker schrieb:

    Simon2 schrieb:

    Du (als hier ausgewiesener C++-Kenner) behauptest, dass irgendeine (von Dir nicht genannte) Sprache in diesen Bereichen dazu besser geeignet wäre ... ohne auch nur ein einziges Beispiel zu nennen.

    erstmal bin ich kein C++ kenner, ich kenne nur ein paar grundlagen (ist dir meine fragerei zu den templates noch in erinnerung?).

    Solltest du dann nicht ein wenig vorsichtiger mit Wertungen zu C++ sein?

    aber nein, warum?
    ich selbst habe auch mal C++ verwendet, und weiss, was für 'ne fummelei das ist im verhältnis zu sprache X.

    Komisch, ich empfinde es umgekehrt. Das coolste (naja zumindest eines der coolen) Feature(s) von C++ ist ja das hier:

    std::string a = "x", b = "x";
    a==b; //true
    

    🙂

    Undertaker schrieb:

    ich kenne leute, die C++ und sprache X, Y und Z regelmässig verwenden. die meisten davon fluchen über C++ und seine widerspenstigkeit.
    ich kenne jemanden, der C++ und sprache X unterrichtet und weiss, dass C++ den leuten wesentlich schwieriger näher zu bringen ist als sprache X.
    🙂

    Du kennst aber auch uns. Ist das dann nicht "Aussage gegen Aussage"?



  • Mr. N schrieb:

    std::string a = "x", b = "x";
    a==b; //true
    

    🙂

    Na, der war mal wieder mit Anlauf. 😃

    String a = "x";
        String b = "x";
        if(a==b) System.out.println("a==b");
        else System.out.println("a!=b");
    

    magst Du das mal ausprobieren?

    Das untermauert übrigens auch weiter Deine Aussage, dass Du auch diese J-Geschichte bestens beurteilen kannst. 😃



  • Jester schrieb:

    Mr. N schrieb:

    std::string a = "x", b = "x";
    a==b; //true
    

    🙂

    Na, der war mal wieder mit Anlauf. 😃

    String a = "x";
        String b = "x";
        if(a==b) System.out.println("a==b");
        else System.out.println("a!=b");
    

    magst Du das mal ausprobieren?

    Das untermauert übrigens auch weiter Deine Aussage, dass Du auch diese J-Geschichte bestens beurteilen kannst. 😃

    Seit ich ich mit Java angefangen habe verstehe ich nun auch was damit gemeint ist 🙂

    Aber sollte es dann nicht so heißen:

    String a = new String("x");
    String b = new String("x");
    

    Da "x" sonst irgendwo im Speicher erzeugt werden würde und a und b beide diese Speicherstelle von "x" refernzieren würden. ???



  • nicht besser als die chinesen... 😮



  • KasF schrieb:

    Aber sollte es dann nicht so heißen:

    String a = new String("x");
    String b = new String("x");
    

    nee, a und b referenzieren dann zwei verschiedene objekte, obwohl mit gleichem inhalt 😉
    Jester hatte zwei referenzen auf das gleiche objekt. so wird's vielleicht deutlicher:

    String x = new String ("x");
    String a = x; 
    String b = x;
    

    🙂



  • Undertaker schrieb:

    KasF schrieb:

    Aber sollte es dann nicht so heißen:

    String a = new String("x");
    String b = new String("x");
    

    nee, a und b referenzieren dann zwei verschiedene objekte, obwohl mit gleichem inhalt

    Genau das wollte ich doch. Entweder du hast mein Post nicht richtig gelesen oder ich schreibe zu unverständlich 🙂 ( oder ich habe immer noch keine Ahnung von J )

    Das Beispiel von Jester soll(te) doch nur zeigen das a!=b ist, obwohl beide den selben Inhalt haben . (?)



  • Undertaker schrieb:

    aber nein, warum?

    Bild dir deine Meinung...?

    ich selbst habe auch mal C++ verwendet, und weiss, was für 'ne fummelei das ist im verhältnis zu sprache X.

    Aber scheinbar hast du nicht wirklich viel von c++ gelernt. Ohne dir zu nahe treten zu wollen, dir fehlt komplett das verständnis für eine menge an essentiellen teilen von c++, dass du die sprache einfach nicht beurteilen kannst.

    ich kenne leute, die C++ und sprache X, Y und Z regelmässig verwenden. die meisten davon fluchen über C++ und seine widerspenstigkeit.

    Ich kenne Leute die Osama bin Laden und Saddam Hussein nicht auseinander halten können. Und?

    ich kenne jemanden, der C++ und sprache X unterrichtet und weiss, dass C++ den leuten wesentlich schwieriger näher zu bringen ist als sprache X.
    🙂

    Ich kenne jemanden der X unterrichtet und es deutlich schwerer findet es den leuten näher zu bringen als Y. Ist X jetzt schlechter als Y?

    Sprich: ist esperanto besser als chinesisch?

    aber bei manchen leuten ist hopfen und malz verloren. die sind nicht hier zu lernen, sondern um ihre meinung zu vertreten... und ich depp antworte auch noch immer brav 😕



  • KasF schrieb:

    Undertaker schrieb:

    KasF schrieb:

    Aber sollte es dann nicht so heißen:

    String a = new String("x");
    String b = new String("x");
    

    nee, a und b referenzieren dann zwei verschiedene objekte, obwohl mit gleichem inhalt

    Genau das wollte ich doch. Entweder du hast mein Post nicht richtig gelesen oder ich schreibe zu unverständlich 🙂 ( oder ich habe immer noch keine Ahnung von J )

    Das Beispiel von Jester soll(te) doch nur zeigen das a!=b ist, obwohl beide den selben Inhalt haben . (?)

    nein, jester wollte zeigen, dass Mr. N's beispiel sich in java genauso verhält wie in c++ und Mr. N deshalb die pferde ab und zu lieber mal im stall halten sollte 😮



  • Top Unterhaltung 👍



  • ein gast schrieb:

    KasF schrieb:

    Undertaker schrieb:

    KasF schrieb:

    Aber sollte es dann nicht so heißen:

    String a = new String("x");
    String b = new String("x");
    

    nee, a und b referenzieren dann zwei verschiedene objekte, obwohl mit gleichem inhalt

    Genau das wollte ich doch. Entweder du hast mein Post nicht richtig gelesen oder ich schreibe zu unverständlich 🙂 ( oder ich habe immer noch keine Ahnung von J )

    Das Beispiel von Jester soll(te) doch nur zeigen das a!=b ist, obwohl beide den selben Inhalt haben . (?)

    nein, jester wollte zeigen, dass Mr. N's beispiel sich in java genauso verhält wie in c++ und Mr. N deshalb die pferde ab und zu lieber mal im stall halten sollte 😮

    Das musst du mir mal erklaeren. Ich haette erwartet das std::string den ==Operator ueberlaed und dass gild:

    std::string x = "a", y = "a";
    x == y; // true
    

    Anders bei Java:

    String x = "a";
    String y = "a";
    x == y; // false
    

    Weil der ==Operator bei Java nicht auf Inhalt sondern auf Identitaet prueft.

    Finde ich eigentlich ziemlich verwirrend in C++ fuer Anfaenger. Denn wenn man den ==Operator nun mal zufaellig nicht ueberlaed, dann prueft der ==Operator auf einmal doch auf Identitaet. Da muss man staendig aufpassen und prav die Doku von der Klasse lesen.

    PS: moege der C++ vs. Java Flamewar wieder vom neuen beginnen :p



  • DEvent schrieb:

    Finde ich eigentlich ziemlich verwirrend in C++ fuer Anfaenger. Denn wenn man den ==Operator nun mal zufaellig nicht ueberlaed, dann prueft der ==Operator auf einmal doch auf Identitaet. Da muss man staendig aufpassen und prav die Doku von der Klasse lesen.

    Nein. Wenn du den op== nicht überlädst, kannst du die Klasse überhaupt nicht vergleichen - und sowas fällt bereits dem Compiler auf.



  • CStoll schrieb:

    DEvent schrieb:

    Finde ich eigentlich ziemlich verwirrend in C++ fuer Anfaenger. Denn wenn man den ==Operator nun mal zufaellig nicht ueberlaed, dann prueft der ==Operator auf einmal doch auf Identitaet. Da muss man staendig aufpassen und prav die Doku von der Klasse lesen.

    Nein. Wenn du den op== nicht überlädst, kannst du die Klasse überhaupt nicht vergleichen - und sowas fällt bereits dem Compiler auf.

    Stimmt hast Recht. Man kann die Pointer vergleichen, aber nicht die Klassen.

    Ok, dann ist es fuer Anfaenger verwirrend, dass man manche Klassen vergleichen kann und manche nicht. In Java kann man immer beides machen, Identitaet und Inhalt vergleichen. (wobei, wenn man die equals() Methode nicht ueberschreibt, dann ist Identitaet gleich Inhalt).



  • Undertaker schrieb:

    ...
    ich selbst habe auch mal C++ verwendet, und weiss, was für 'ne fummelei das ist im verhältnis zu sprache X....

    Schau an: Ich habe auch mal die Sprache X verwendet und weiß, was für eine Fummelei das ist im Verhältnis zu C++ ...
    Und ih kenne auch Leute, die in X und C++ programmieren und froh sind, wenn sie wieder C++ verwenden dürfen.

    ... und was beweist das nun ? Dass es Leute gibt, die eine Sprache besser beherrschen als die andere ? ...

    Undertaker schrieb:

    ...
    ich kenne jemanden, der C++ und sprache X unterrichtet und weiss, dass C++ den leuten wesentlich schwieriger näher zu bringen ist als sprache X.
    🙂

    Ich kenne auch jemanden, der zu berichten weiß, dass X wesentlich schwerer zu vermitteln ist als Visual Basic.

    Gruß,

    Simon2.



  • ein gast schrieb:

    ...
    nein, jester wollte zeigen, dass Mr. N's beispiel sich in java genauso verhält wie in c++ und Mr. N deshalb die pferde ab und zu lieber mal im stall halten sollte 😮

    Da aber Jesters Code fachlich etwas Anderes macht als Mr. N's, ist das kein besonders geglücktes Gegenbeispiel...

    Gruß,

    Simon2.



  • DEvent schrieb:

    Ok, dann ist es fuer Anfaenger verwirrend, dass man manche Klassen vergleichen kann und manche nicht.

    Nunja, nicht bei jeder Klasse macht es Sinn, ihren Inhalt zu vergleichen (was soll z.B. herauskommen, wenn du zwei Ausgabestreams vergleichen willst?)

    In Java kann man immer beides machen, Identitaet und Inhalt vergleichen.

    In C++ kann man auch biedes, wenn es benötigt wird (Inhalt über op==, Identität über Adressvergleich)

    (wobei, wenn man die equals() Methode nicht ueberschreibt, dann ist Identitaet gleich Inhalt).

    Und da sind wir bei dem Verhalten, das dich am C++ Vergleichsoperator gestört hatte 😉

    Zum Vergleich C++ vs whatever: Ich erinnere mich an einige frühere Diskussionen mit Undertaker (damals noch als "pale dog") dazu - jeder Versuch, ihm Details zu entlocken, wurde geflissentlich ignoriert (und ich habe immer noch keine Erklärung bekommen, wie man in Java const-korrekte Programme schreiben kann (oder warum man es nicht kann)).



  • wär is päle dofg 😮 😕 😕 👎 👎



  • DEvent schrieb:

    Anders bei Java:

    String x = "a";
    String y = "a";
    x == y; // false
    

    Weil der ==Operator bei Java nicht auf Inhalt sondern auf Identitaet prueft.

    Das stimmt nicht ganz. x und y sind hier identisch, x==y ist true.
    Stichwort Stringpool.

    tfa



  • tfa schrieb:

    ...
    Stichwort Stringpool.

    tfa

    Naja, spätestens bei einem anderen Klassentypen als string (und nennen wir ihn einfach nur MyString) funktioniert das aber auch alles sowieso nicht mehr.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Da aber Jesters Code fachlich etwas Anderes macht als Mr. N's, ist das kein besonders geglücktes Gegenbeispiel...

    Das siehst Du falschrum. Der Code ist ziemlich stupide von C++ nach Java übersetzt. Und oh wunder, er liefert genau das, was MrN als tolles Feature von C++ angepriesen hat... das sagt nichts über das Gegenbeispiel aus, sondern etwas über das erste Beispiel (und vielleicht auch über den Autor des ersten Beispiels ;)).



  • Jester schrieb:

    ...Der Code ist ziemlich stupide von C++ nach Java übersetzt. Und oh wunder, er liefert genau das, was MrN als tolles Feature von C++ angepriesen hat... das sagt nichts über das Gegenbeispiel aus, sondern etwas über das erste Beispiel (und vielleicht auch über den Autor des ersten Beispiels ;)).

    Ich habe das schon so verstanden 😃 ... hatte aber den Eindruck, dass hier eine Diskussion unter Leuten ausbricht, die das nicht verstanden haben und deswegen Deinen Code eben als "Gegenbeispiel" und nicht als Beleg für einen didaktischen faux-pas von Mr N. interpretierten.

    Gruß,

    Simon2.


Anmelden zum Antworten