C++, lohnt es sich
-
Hallo,
VLA steht für Variable Length Array.
Man kann in C99 Arrays mit erst zur Laufzeit bekannter Größe auf dem Stack anlegen. In C++ geht das nicht, man muß dann dazu new verwenden (oder besser auf einen der Container ausweichen).MfG Jester
-
..... schrieb:
du bist ja wohl der Obertroll @ Optimizer
don't feed it...
Ich hab wenigstens einen Namen.
-
Optimizer schrieb:
MaSTaH schrieb:
gh0st124 schrieb:
du kannst sogar ohne Klassen C++ programmieren (machst du vielleicht sogar), jaja, nur ist das
1. verdammt dämlich
2. verdammt lahm (C++ Compiler im Vrgl. zu C Compiler)Wie kommst du darauf? Warum sollte ein C++ Compiler nicht in der Lage sein gleichwertigen Maschinencode bei gleichem Input zu liefern? Mir scheint du hast da etwas falsch verstanden.
C++ ist halt langsamer. Ist doch logisch, oder? Jetzt hat man es schon so oft gesagt, dann muss völlig gleichwertiger Code unter C++ einfach langsamer sein.
wie kann ein völlig gleichwertiger Code denn langsamer sein? Dann wäre er ja wohl nicht völlig gleichwertig!
[EDIT] Im übrigen ist wohl ein sehr großer Teil der Geschwindigkeit vom Compiler abhängig, ich glaub das nennt man Optimierung
-
struct myStruct { int x; int y; };
void set(myStruct *param, int x_, int y_) { x = x_; y = y_; }
void myStruct::set(int x_, int y_) { x = x_; y = y_; }
Das z.B. ist völlig gleichwertiger Code. Vermutlich erstellt der C++ Compiler daraus sogar den selben Code wie der C-Compiler.
Oder ist vielleicht das böse C++ doch langsamer??
-
Ich sehe nix gleichwertiges...
Dein erstes Beispiel bekommt nen Pointer aufn Struct von Dir, tut da aber nix mit, und setzt dann zwei globale Variablen auf die Werte die in den Parametern übergeben wurden.
Das zweite dagegen ist so wie Deine struct definiert ist nicht kompilierbar, weil innerhalb der struct der Prototyp fehlt. Denke ich mir den aber dazu, bewirkt das was ganz anderes als das erste Beispiel... Es verändert nämlich keine Globalen Vars sondern die der jeweiligen Instanz des structs.PS: Da int x und y aber eh public sind, würde ich sie direkt manipulieren, da ich dann den Funktionsaufruf spare
-
Wo siehst du hier globale Variablen?
-
void set(myStruct *param, int x_, int y_) { x = x_; y = y_; }
Keine globalen Variablen? Dann haben wir hier nen Syntax-Error :p
Was ich aber nicht so ganz verstehe, welchen Punkt versuchst Du hier zu machen. Was willst Du damit aussagen?
-
Das C++ nicht langsamer ist wie C. Dieses Gerücht hält sich ja hartnäckigst.
-
In diesem Thread ist außer Dir aber keiner drauf angesprungen. Nach meinem Gefühl war es jedem klar.
-
hi,
also in c könnte ich praktisch einfach schreiben
int x;
cin >> x;
int vla[x];
oder wie? und was is da der vorteil zu new?thx für die erklärung
busta
-
oder wie?
nein, cin etc. ist ja C++
*klugscheiss* (btw. size_t nicht int für größen!)
und was is da der vorteil zu new?
new arbeitet auf dem FreeStore und die VLAs auf dem Stack. Außerdem verhalten sich VLAs wie Arrays und nicht wie Pointer (ja, da gibt es einen Unterschied)
-
ok, danke
gibs da performance unterschiede?
grüsse busta
-
Wo ihr gerade cin und cout erwähnt, diese Zweckentfremden doch den links- und rechts Shift-Operator für die Ein- und Ausgabe, oder?
-
Das heisst 'überladen' und nicht 'zweckentfremden'.
-
new arbeitet auf dem FreeStore und die VLAs auf dem Stack.
Meines Wissens nach fordert der Standard nicht, dass VLAs auf dem Stack liegen. Es gibt zumindest mindestens eine Implementation die für VLAs keinen Stackspeicher verwendet.
-
new arbeitet auf dem FreeStore und die VLAs auf dem Stack. Außerdem verhalten sich VLAs wie Arrays und nicht wie Pointer (ja, da gibt es einen Unterschied)
int a[10];
int *b = malloc(sizeof(int) * 10);Der einzige Unterschied, den ich kenne (in C), ist folgender:
a ist ein Konstanter Pointer -> a++, a = ... somit nicht erlaubt!
b ist ein variabler Pointer -> b++, b =... somit erlaubt!d.h. int a[10] ist gleichwertig mit *int const b
Kennst du da etwa noch einen Unterschied?
//--------------------------------------------------
@ Shade Of MineHätte nicht gedacht, dass bei C++ die Sprache C als Ballast angesehen wird.
Vielleicht deshalb, weil einige Sachen anders funktionieren (wie z.B. structs)?
Hast du einige Links zum Thema oder ist das deine persönliche Meinung?
-
Es ist deshalb Ballast, weil die erzwungene Kompatibilität zu C die Weiterentwicklung von C++ (bisher) behindert.
Aber wie es aussieht, gehen die beiden Sprachen künftig getrennte Wege.
-
gh0st124 schrieb:
Hätte nicht gedacht, dass bei C++ die Sprache C als Ballast angesehen wird.
Will hier irgendjemand ernsthaft Cs intuitive Deklarationssyntax verteidigen? Über das Übersetzungsmodell und den Zeiger-Array-Mischmasch kann man sich sicher auch streiten. Fast alles, was mich an C++ stört, kommt von C...
Und C99s complex-Datentypen z.B. passen noch weniger in die C++-Welt als VLAs.