Wenn du wirklich gut sein willst, und Wert auf gute Codequalität legst, dann wird die Umstellung von C# auf C++ sehr "krass" werden.
Da aber die meisten Programmierer ihre aktuelle Hauptsprache meist nur oberflächlich beherrschen, wirst du vermutlich klar kommen, wenn du nur oberflächlich rumfrickelst.
Das hängt also sehr stark von deinem Arbeitgeber ab, insbesondere welchen Wert er auf guten Code legt.
Es ist sehr oft der Fall, dass auch fähige Entwickler leider dazu gezwungen sind, ihren Code "idioten-verständlich" zu schreiben, sodass ihn jeder Azubi beim Überfliegen sofort lesen kann. Dass man damit sämtliche höheren Sprachfeatures und enormes Optimierungspotential ohne Not aus der Hand gibt, ist natürlich sofort klar, aber oft werden Software-Entwickler eben nicht als "Fachleute", sondern als "Ungelernte" angesehen. Und auf diesem Niveau bleiben dann auch die meisten Code-Basen stehen.
Ich muss als C++ler ganz klar sagen, dass mein eigener Code im Schnitt sehr sauber und effizient ist, sich an gängige Konventionen hält, immer bei den striktesten Compilereinstellungen ohne Warnungen kompiliert, maximal portabel ist, gängige Sanitizer / Linter / Checker / Fuzzer keinerlei Bugs oder gar Speicherlecks finden, aaaaaaaber ein Einsteiger wird meinen Code leider nicht lesen und verstehen können.
Beachte bitte den Punkt hinter dem "aaaaaaaber", denn merkwürdiger Weise sind in den meisten Firmen nicht die Punkte davor wichtig, sondern es wird viel zu viel Wert auf die "Lesbarkeit für Unerfahrene" gelegt, was meiner Meinung nach ein riesen großer Fehler ist, und dazu führt, dass so ziemlich alle großen Software Projekte mit der Zeit zu einem riesen Haufen Müll mutieren.
Stell dir mal vor, Fachleute irgendeiner anderen Disziplin würden so arbeiten! Also wenn z. B. ein Physiker auf Tensoren verzichten würde, weil die ja für "Einsteiger zu kompliziert" sind, und sich stattdessen künstlich auf die Grundrechenarten beschränken würden.
Und gerade bei C++ ist es leider der Fall, dass die meisten Entwickler so dermaßen faul sind, sich weiter zu bilden, dass sie sich, theoretisch als Physiker, sogar vor Pippifax wie komplexen Zahlen fürchten und diese meiden.
Ein Beispiel aus der Praxis! Ausnahmen in C++ fängt man so, und zwar NUR so (Disclaimer: Es sei denn, man weiß GENAU was man tut und will eine gefangene Ausnahme speziell behandeln, was aber in 99,999% nicht zutreffen wird):
try {
// wirf eine FooException
} catch (const FooException & ex) {
// mach was mit "ex"
}
Ich schätze, dass MINDESTENS 30% bis 40% der C++ler das falsch machen, und man leider zu oft Dinge wie das hier ...
} catch (const FooException ex) {
... oder noch schlimmer das hier ...
} catch (FooException ex) {
... sieht. Den meisten ist überhaupt nicht klar, was ein "Exception-Stack" ist, warum es den gibt und was daran so besonders ist, dass man eben NUR Referenzen und keine kopierten Objekte fängt.
Deshalb muss ich den Satz ...
Ist doch wurscht, kennste eine, kennste alle.
... aus der anderen Antwort leider als gefährlichen Schwachsinn abtun. Diese Art von Aussagen hört man leider viel zu oft von Entwicklern, die sich bei WEITEM selbst total überschätzen und mit ihren paar Jahren auf dem Gebiet denken, sie hätten so etwas wie Erfahrung. Dem ist nicht so! Nicht mal annähernd. (Nebenbei bemerkt hört man solche Aussagen vermehrt auch von Studenten oder Schülern .. je jünger, desto öfter.)
Allein bei der Addition zweier Integer gibt es bei C++ mehr zu beachten als bei C#, und zwar so viel, dass in der einschlägigen Fachliterator ganze Kapitel dazu gefüllt sind.
Im Grunde kann man sagen, dass "kennste Eine, kennste Alle" genau das Gegenteil von dem ist, was eigentlich Realität ist. Du wirst kaum eine Aufgabenstellung finden, und sei sie auf den ersten Blick NOCH so trivial, die ein Profi in C++ so lösen wird, wie in C#.
Ich weiß, das würden so nicht alle Entwickler unterschreiben, aber seien wir mal ehrlich: Wer das anders sieht, ist vermutlich selbst leider eher Mittelmaß und verfügt nicht über den Horizont, das ganze Thema zu überblicken. (Das ist jetzt harsch ausgedrückt, trifft den Nagel aber auf den Kopf. Sorry!)
Fazit: Wenn du "Glück" hast, und an eine Pfuscherbude gerätst (was auf die meisten Firmen zutrifft), dann wird der Umstieg nicht sehr schwer für dich werden, einfach weil es niemanden im ganzen Betrieb gibt, der einschätzen könnte, was guter Code ist. :)
Wenn du "Pech" hast, kommst du in ein Unternehmen, wo du von den alten Hasen lernen kannst, was vermutlich hart werden wird, und du die erste Zeit nach Feierabend massiv büffeln musst, um dich in C++ einzufuchsen. Von solchen Firmen gibt es aber - leider - nicht viele.
Dir und deiner zukünftigen Karriere zuliebe solltest du aber darauf hoffen "Pech" zu haben, denn nur DAS wird dich langfristig weiter bringen, wenn du nicht zum Code-Monkey verkommen willst.
C++ ist sehr komplex und hat sehr viele Paradigmen und Konzepte, die es in anderen Sprachen so nicht gibt (C# übrigens auch, aber weniger als C++). Das alles zu überblicken und zu verstehen braucht Zeit ist am Ende aber das vermutlich mächtigste Werkzeug, was du so finden kannst.
C++ wurde nie für Einsteiger entwickelt, sondern für Profis, welche die Sprache und ihre Möglichkeiten gut kennen, anwenden können und zu schätzen wissen. Wer meint, dass C++ Code nur gut ist, wenn er von jedem Einsteiger sofort gelesen und verstanden werden kann, ist auf dem Holzweg.
Man erwartet von der 3D-Suite Blender auch nicht, dass sich darin sofort jeder zurecht findet, der mal in Paint rumgeklickt hat.
Also wenn du es gut machen willst, dann wird der Umstieg auf C++ von C# her nicht soooo leicht, wie du vielleicht denkst. Wenn dir while, switch und class aber grob reichen und du dich leicht mit Pfusch zufrieden geben kannst, dann solltest du keinerlei Probleme haben. :)
Trotzdem viel Erfolg! ;)