Java System.out.println(" " + a + " " + c); vs. C++ cout << " " << a <<



  • Java

    System.out.println(" " + a + " " + c);
    

    vs.

    C++

    cout << " " << a << " " << c << endl;
    

    Was findet ihr besser und warum?
    Also warum findet ihr cout oder System.out.println besser als das andere?



  • System.out.println(" " + a + " " + c);
    

    Gefällt mir nicht, weil nutzloserweise Strings zusammengelötet werden.

    cout << " " << a << " " << c << endl;
    

    Gefällt mir auch nicht.

    Ich vermute, ich hätte gerne println(" " , a , " " ,c)



  • Gefällt volkard das hier besser?

    template <typename T>
    std::ostream& operator , (std::ostream& os, T const& val)
    {
        return os << val;
    }
    
    std::cout, 42, "blah", 'P';
    


  • 314159265358979 schrieb:

    Gefällt volkard das hier besser?

    template <typename T>
    std::ostream& operator , (std::ostream& os, T const& val)
    {
        return os << val;
    }
    
    std::cout, 42, "blah", 'P';
    

    Nein, natürlich nicht.
    Postest Du nicht gelegentlich eine printf mit variadic templates? So eine, nur ohne den Format-String. Und eine globale println, die die cout.println aufruft.



  • wer interessiert sich noch für konsolenausgabe? wir haben doch nicht mehr 1989.



  • Konsole > GUI imo



  • nnnezu schrieb:

    wer interessiert sich noch für konsolenausgabe? wir haben doch nicht mehr 1989.

    In Textausgabedialogen ist das Konzept auch oft nicht anders.

    Du hast deinen Text und deine Variablenwerte zwischen dem Text, den du ausgeben willst und dann kommt auch nicht viel mehr raus als:

    gui.gibTextbausteinaus("langer Text" + var1 + "weiterer Text" + var2....)



  • volkard schrieb:

    System.out.println(" " + a + " " + c);
    

    Gefällt mir nicht, weil nutzloserweise Strings zusammengelötet werden.

    Warum ist das Nutzlos?

    cout << " " << a << " " << c << endl;
    

    Gefällt mir auch nicht.

    Begründung?

    Ich vermute, ich hätte gerne println(" " , a , " " ,c)

    Und worin soll der Unterschied zu den + als Trennzeichen liegen?



  • Java vs. C++ Ausgabe schrieb:

    cout << " " << a << " " << c << endl;
    

    das gefällt, weil:

    1. wird der Leser von überflüssigem "line noise" verschont, und
    2. ist das "<<" mnemonisch sehr gut gewählt



  • Java vs. C++ Ausgabe schrieb:

    nnnezu schrieb:

    wer interessiert sich noch für konsolenausgabe? wir haben doch nicht mehr 1989.

    In Textausgabedialogen ist das Konzept auch oft nicht anders.

    Du hast deinen Text und deine Variablenwerte zwischen dem Text, den du ausgeben willst und dann kommt auch nicht viel mehr raus als:

    gui.gibTextbausteinaus("langer Text" + var1 + "weiterer Text" + var2....)

    Hast du schon mal ein GUI-Framework gesehen, das << für Labels usw. verwendet?



  • !rr!rr_. schrieb:

    Java vs. C++ Ausgabe schrieb:

    cout << " " << a << " " << c << endl;
    

    das gefällt, weil:

    1. wird der Leser von überflüssigem "line noise" verschont, und
    2. ist das "<<" mnemonisch sehr gut gewählt

    Es lockt den stream einmal pro << (oder noch mehr), statt einmal pro println.



  • Seien wir mal alle ehrlich. Alles was nach printf(); kam war völliger Unsinn.
    - kompakt
    - sauber
    - einfach
    - übersichtlich

    C++: Was soll denn bitte der Quatsch? Wenn ich einen String ein wenig formatiert ausgeben will, will ich keinen Zug in ASCII-Art aus << - Operatoren malen.

    Java: Sieht zumindest sauberer aus.

    printf(); gewinnt, Thread geschlossen.



  • volkard schrieb:

    !rr!rr_. schrieb:

    Java vs. C++ Ausgabe schrieb:

    cout << " " << a << " " << c << endl;
    

    das gefällt, weil:

    1. wird der Leser von überflüssigem "line noise" verschont, und
    2. ist das "<<" mnemonisch sehr gut gewählt

    Es lockt den stream einmal pro << (oder noch mehr), statt einmal pro println.

    Aber hast du dann nicht wieder das Problem das "nutzloserweise Strings zusammengelötet werden"? Oder wie kann man sich die Implementierung von println sonst vorstellen?

    Ein weiteres Problem bei println ist auch die Umwandlung von beliebigen Typen in Typen die man ausgeben kann (strings). Wie soll das realisiert werden?



  • rüdiger schrieb:

    Aber hast du dann nicht wieder das Problem das "nutzloserweise Strings zusammengelötet werden"? Oder wie kann man sich die Implementierung von println sonst vorstellen?

    Ohne jetzt ein Stream-Objekt zu bauen, das kannste Dir ja dann vorstellen.

    #include <cstdio>
    using namespace std;
    
    void printImp(){
    }
    void printImp(int x){
        printf("%d",x);
    }
    void printImp(char x){
        printf("%c",x);
    }
    void printImp(char const* x){
        printf("%s",x);
    }
    template<typename Head,typename... Tail>
    void printImp(Head head,Tail... tail){
        printImp(head);
        printImp(tail...);
    }
    template<typename... List>
    void print(List... list){
    //  lock
        printImp(list...);
    }
    
    int main() {
        print(1,'+',2,"=",1+2);
    }
    

    rüdiger schrieb:

    Ein weiteres Problem bei println ist auch die Umwandlung von beliebigen Typen in Typen die man ausgeben kann (strings). Wie soll das realisiert werden?

    Man soll println nur als Abkürzung für cout.println haben und man kann auch println auf einen stringstream aufrufen.



  • KennerDerProfis schrieb:

    Seien wir mal alle ehrlich. Alles was nach printf(); kam war völliger Unsinn.
    - kompakt
    - sauber
    - einfach
    - übersichtlich

    C++: Was soll denn bitte der Quatsch? Wenn ich einen String ein wenig formatiert ausgeben will, will ich keinen Zug in ASCII-Art aus << - Operatoren malen.

    Java: Sieht zumindest sauberer aus.

    printf(); gewinnt, Thread geschlossen.

    Als C Programmierer mag ich zwar printf();, allerdings kenne ich auch die Nachteile.
    Z.B: mußt du immer den Datentyp für den Platzhalter richtig bennenen.
    Also %i, %d %s usw.

    Bei " " + d + " " + x oder cout << " " << d << " " << x fällt das Weg.
    Insofern sind letztere beiden bequemer zu Programmieren.



  • Ist's in C# nicht etwa so:

    printf( "bla %1 %2 blubb", Var1, Var2 );
    

    ?
    Das gefiele mir am Besten.



  • Java vs. C++ Ausgabe schrieb:

    volkard schrieb:

    System.out.println(" " + a + " " + c);
    

    Gefällt mir nicht, weil nutzloserweise Strings zusammengelötet werden.

    Warum ist das Nutzlos?

    Weil man auf eine Konsole/Datei/Gerät üblicherweise ohne Nachteile beliebig kurze Daten schreiben kann, da diese gepuffert sind. Für einen neuen String muss erstmal neuer Speicher allokiert werden.

    1. Schreibe " " auf Gerät
    2. Schreibe a auf Gerät
    3. Schreibe " " auf Gerät
    ...

    vs.

    1. Allokiere x = 2 + a.length + c.length Bytes
    2. Schreibe " " nach x
    3. Schreibe a nach x
    ...
    n. Schreibe x auf Gerät



  • fdfdg schrieb:

    Ist's in C# nicht etwa so:

    printf( "bla %1 %2 blubb", Var1, Var2 );
    

    ?
    Das gefiele mir am Besten.

    Bei C# siehts so aus:

    Console.WriteLine("hello {1} world {2}, 42, "hallo");
    

    Ich vermute, dass die 42 dann gewrappt wird in ein objekt und dann die virtuelle ToString methode aufgerufen wird.


Anmelden zum Antworten