Wie lange wird es noch C++ geben?
-
Hey ihr,
Da ich momentan am C++ lernen bin und jede Menge Zeit hinein investiere habe ich mir jetzt letztens Mal die Frage gestellt: "Was bringt das überhaupt noch?"
Denn C++ ist jetzt, wo es C# mit dem neuen Framework gibt ja eh 'veraltet'???
Glaubt ihr also, dass es sich noch lohnt C++ zu lernen? Ganz besonders die tausenden von Sachen mit Zeigern müsste man sich doch sparen können,weil damit eh bald keiner mehr proggt.Wie lange wird es C++ noch geben?
cya
David
-
Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
777 schrieb:
Denn C++ ist jetzt, wo es C# mit dem neuen Framework gibt ja eh 'veraltet'???
Wieso glauben Leute eigentlich generell, das eine sei eine Erweiterung oder eine neue Version des anderen? C++ und C# sind doch grundverschiedene Sprachen mit unterschiedlichen Konzepten...
777 schrieb:
Ganz besonders die tausenden von Sachen mit Zeigern müsste man sich doch sparen können,weil damit eh bald keiner mehr proggt.
Und wer proggt die Sprache/das Framwork, welche es Dir erlauben, ohne Zeiger zu proggen?

-
Auch in C++ liesse sich ja fast auf Zeiger verzichten? Die Betonung lieft auf 'fast'.
Also denkt ihr, dass es noch Sinn macht C++ zu lernen?
-
777 schrieb:
Also denkt ihr, dass es noch Sinn macht C++ zu lernen?
Ja, ganz sicher. Siehe die anderen INF Threads zu dem Thema.
-
C++ wird immer noch weiterentwickelt (vor kurzem kam erst die TR1 raus - eine neue Version des Standards ist afaik auch schon geplant), sollte also noch eine Weile überleben. Und C# ist da auch keine echte Konkurrenz - die beiden Sprachen verfolgen völlig unterschiedliche Konzepte und haben jede ihre eigenen Anwendungsgebiete.
(ein Schraubendreher gilt ja auch nicht als "veraltet", nur weil es seit neuestem Akku-Bohrer gibt ;))
-
es kommt immer darauf an, was du willst.
in c++ musst halt recht viel selbst machen.
dafür hast auch sehr viel selbst in der hand, es is schnell, performant, toll, schöne sprache, aber du kannst auch probleme kriegen (ich denke mal der hauptteil davon wird sich in der speicherverwaltung abspielen, inkl pointer etc)c# hingegen ist relativ langsam, da auch vom compiler kein nativer code erzeugt wird, außerdem ist es nicht zu 100 % plattformunabhängig, gibt zwar mono, aber mono hängt irgendwo zw. .net framework 1 und 2. außerdem kann man zum beispiel per dllimport auf schnelle libs aus c++ zugreifen. für echtzeit finde ich zum beispiel .net sprachen im allgemeinen äußerst ungeeignet, da diese nicht direkt auf dem prozessor laufen, sondern immer über irgendeinen "interpreter".
c++ programme werden natürlich normalerweise für bestimmte anwendungszwecke programmiert, wodurch meist die plattformunabhängigkeit weg fällt, das ist mir auch klar (und es muss neu compiliert werden in der jeweils anderen umgebung)
ich finde, c# ist für gui und so ganz schön, allerdings ist c++ natürlich für aufwendige logik-aufgaben und berechnungen schon viel toller, als c#
€:
in c# kann man in unsafe bereichen auch noch zeiger verwenden
-
68 Jahre
-
Nachtrag:
777 schrieb:
Auch in C++ liesse sich ja fast auf Zeiger verzichten? Die Betonung lieft auf 'fast'.
Ja, auf der Oberfläche lassen sich Zeiger wunderbar hinter Alternativkonzepten (Smart-Pointer, Container etc) verbergen - aber um diese umzusetzen, brauchst du doch wieder nackte Zeiger.
-
Hat C# wirklich keine Zeiger (außer unsafe)? Die gibts ja sogar in Java, wenn auch nicht mit Pointerarithmetik.
-
kurze zwischenfrage schrieb:
Hat C# wirklich keine Zeiger (außer unsafe)? Die gibts ja sogar in Java, wenn auch nicht mit Pointerarithmetik.
Referenzen in C# haben exakt die gleiche Semantik wie in Java, falls Du das meinst. Darüberhinaus kenne ich in Java keine Zeigerkonzepte (ich kenne Java aber auch nicht besonders gut).
-
LordJaxom schrieb:
kurze zwischenfrage schrieb:
Hat C# wirklich keine Zeiger (außer unsafe)? Die gibts ja sogar in Java, wenn auch nicht mit Pointerarithmetik.
Referenzen in C# haben exakt die gleiche Semantik wie in Java, falls Du das meinst. Darüberhinaus kenne ich in Java keine Zeigerkonzepte (ich kenne Java aber auch nicht besonders gut).
Kann man die Referenzen in C# auf null setzen? In Java kann ich einfach sowas machen.
Object o = null;Darum würde ich von Zeigern sprechen, auch wenn es oft als Referenz bezeichnet wird.
In C++ kann eine Referenz ja nicht NULL sein.
-
Die Referenzen in C# und Java sind relativ identisch, in C# kannst du sie auch auf null setzen. Trotzdem ist das keine Art von Zeigern wie bei C++, du hast zwar Referenzen/Zeiger auf Objekte, dafür hast du keine Zeiger auf einzelne chars o.ä.
Und afaik kann man in Java keine Swap-Methode schreiben:
void swap( int& a, int& b ) { int tmp = a; a = b; b = tmp; } int a, b; swap( a, b );vs
huch, geht nicht?? Höchstens so: void swap( int[] arr, int i1, int i2 ) { int tmp = arr[i1]; arr[i2] = tmp; arr[i1] = tmp; } int[] bla = { 10, 20 }; swap( bla, 0, 1 );Deshalb halt "es gibt keine Zeiger in Java". Man kann in Java und C# halt nur by-value übergeben und nie by-reference - man sich aber drüber streiten, ob ein Referenz-Parameter ein call-by-reference (weil eine Referenz auf ein Objekt übergeben wurde) oder aber ein call-by-value (weil ja nur der Wert des Zeigers übergeben wurde) verwendet wird. Wurden aber glaubich schon seitenlange Diskussionen drüber geführt

-
Badestrand schrieb:
Man kann in Java und C# halt nur by-value übergeben und nie by-reference
In C# kann man

void swap<T>(ref T a, ref T b) { T temp = a; a = b; b = temp; } T a; T b; swap(ref a, ref b);
-
Oh stimmt, hab so lang nix mehr mit C# gemacht
Dann nehme ich hiermit die Hälfte von meinem Beitrag zurück..
-
Das du in Java kein Swap machen kannst, liegt halt daran, dass es keine Zeiger/Referenzen auf primitive Typen gibt und kein call by reference. In C# gibt es anscheinend ein richtiges call by reference.
Keine Ahnung ob es irgendwo eine Definition gibt wann man es Zeiger oder Referenz nennt. Was ist dafür ausschlaggebend? Kann auf null zeigen? Pointerarithmetik möglich? ...
-
Badestrand schrieb:
...Trotzdem ist das keine Art von Zeigern wie bei C++, du hast zwar Referenzen/Zeiger auf Objekte, dafür hast du keine Zeiger auf einzelne chars o.ä....
Dass Java die Einschränkung hat, dass man primitive Typen nicht referenzieren kann, bedeutet doch nicht, dass ihre "Objektreferenzen" keine Zeiger sind...
Der einzige Unterschied zwischen Javareferenzen und C++-Zeigern ist:
Java verbietet:
- Referenzierung primitiver Typen (inkl. Referenzen),
- "Zeigerarithmetik" und
- "Objektübergabe per Referenz" "call-by-reference" zu nennen. ( :p
)Der ganze Rest (Verweischarakter, "Umbiegbar", Nullable, cast, Typcharakter, ....) ist doch vollkommen identisch.
BTW: Natürlich geht swap() in Java - nur natürlich nicht mit Referenzen auf primitive Typen, weil Java da eine willkürliche Grenze gezogen hat.
Gruß,
Simon2.
-
Ja, Java und C# haben die Fähigkeiten von Zeigern etwas eingeschränkt (um mögliche Fehlerquellen auszuschließen), diese abgespeckten Zeiger in "Referenzen" umgetauft - und behaupten seitdem, keine Zeiger zu verwenden

(und jetzt gibt es regelmäßig Verständnisprobleme, weil irgendwer C++ Referenzen und Java Referenzen miteinander verwechselt)
-
Simon2 schrieb:
Der ganze Rest (Verweischarakter, "Umbiegbar", Nullable, cast, Typcharakter, ....) ist doch vollkommen identisch.
Da Java-Referenzen bei Übergabe aber kopiert werden, kann das "Umbiegen" einer Referenz keine Seiteneffekte haben.
-
byto schrieb:
Simon2 schrieb:
Der ganze Rest (Verweischarakter, "Umbiegbar", Nullable, cast, Typcharakter, ....) ist doch vollkommen identisch.
Da Java-Referenzen bei Übergabe aber kopiert werden, kann das "Umbiegen" einer Referenz keine Seiteneffekte haben.
Pointer werden in C/C++ genauso kopiert, also hat das (lokale) Umbiegen ebenfalls keine Seiteneffekte.
-
byto schrieb:
...Da Java-Referenzen bei Übergabe aber kopiert werden, kann das "Umbiegen" einer Referenz keine Seiteneffekte haben.
1.) siehe CStoll
2.) Ich verstehe jetzt gerade nicht, welches Szenario Dir vorschwebt. Zwischen "Umbiegen", "Kopieren" und "Seiteneffekt" bekomme ich jedenfalls gerade keine Verbindung.Ich meine mit "Umbiegen":
A* pa = new A("Obj1"); // zeig' mal hierhin .... pa->do_something(); pa = new A("Obj2"); // ... zeig' mal dorthin pa->do_something();(die "deletes" habe ich der Übersichtlichkeit halber weggelassen)
bzw.A pa = new A("Obj1"); // zeig' mal hierhin .... pa.do_something(); pa = new A("Obj2"); // ... zeig' mal dorthin pa.do_something();in beiden Fällen verweist pa erst auf das "Obj1"- und dann auf das "Obj2"-Objekt...
Gruß,
Simon2.