![]() |
Re: C++ = C++ ?
Zitat:
|
Re: C++ = C++ ?
Zitat:
Zumal es auch nicht sehr günstig ist, eine Variable in einer Schleife zu deklarieren. Besser wäre deshalb:
Code:
for(int i,k = 0; i < 10; i++) {
for(k = 0; k < 10; k++) { // Mach was... } } |
Re: C++ = C++ ?
Zitat:
Mal abgesehen davon, dass i ein eher unglücklicher Name für eine Schleifenvariable ist (spätestens bei verschachtelten Schleifen) gehört so eine Fehlerquelle definitiv nicht in Code gegossen. Aber die Sprache erlaubt sie, ja, was in so einem offensichtlichen Fall eher schlecht ist, aber an vielen anderen Stellen hilfreich, denn davon abgesehen ist es in C++ gängig, Variablen erst zu deklarieren (und damit gegebenenfalls zu initialisieren), wenn sie wirklich benötigt werden. Die for-Schleifenvariable ist ein schönes Beispiel dafür. Was juckt mich außerhalb der Schleife das i? Die meisten Sprachen, die die Deklaration außerhalb fordern, garantieren trotzdem nicht einen bestimmten Wert für die Variable, wenn die Schleife verlassen wird. @Rainer: Wie DMW schon sagte: es gibt im C++-Standard überhaupt keinen Header <iostream.h>. Der Name des Headers ist standardkonform <iostream>. Ebenso, wie z.B. die stdio von C in C++ nicht als <stdio.h>, sondern als <cstdio> eingebunden wird. Also macht VC++ das richtig. <iostream.h> gab es nur in der Übergangszeit, in der der Standard noch nicht so weit war. Zu dem Zeitpunkt war der Unterschied (laut Standard), dass die Standardbibliothek bei <iostream.h> global ist, bei <iostream> hingegen im Namespace std liegt. |
Re: C++ = C++ ?
Zitat:
Aber 2 gleiche Variablennamen in einer Funktion sind schon unter aller Sau. Zwar hat der innerste Block immer Priorität, aber eben wie du schon sagtest, Zugriff auf die Variable des äußeren Blocks ist dann unmöglich. Zudem ist es extremst unleserlich... Zitat:
greetz Mike |
Re: C++ = C++ ?
Zitat:
|
Re: C++ = C++ ?
Wenn ihr schon C++ schreibt, dann würde ich nicht die Variablen i anlegen lassen (Constructor) um dann wieder eine Wertzuweisung zu machen. Von daher, wenn es denn C++ sein soll, würde ich immer folgendes vorziehen:
Code:
(int i(0); i < 10; i++);
|
Re: C++ = C++ ?
Zitat:
Code:
ist identisch mit
int i = 0;
Code:
.
int i(0);
Welche Schreibweise besser lesbar ist, ist vermutlich offensichtlich. Das erste ist zudem keine Zuweisung, sondern eine Initialisierung, das ist in C++ ein erheblicher Unterschied. |
Re: C++ = C++ ?
Zitat:
Code:
zwei mal einen Constructor von int aufrufen: einmal den von i und einmal ein temporäres Objekt mit 0. Danach weist er das temporäre Objekt i zu und gibt das temporäre Objekt frei.
int i = 0;
Mit
Code:
aber wird direkt der Constructor von i aufgerufen i und somit gibt es nur einen Constructor Aufruf und kein temporäres Objekt.
int i(0);
/EDIT: Die Frage ist eher: Wie gut ist dein C++ Compiler, als dass er im ersten Falle das temporäre Objekt wegoptimiert. Vom reinen Sprachsatz/-standard her, läuft es im ersten Falle wie beschrieben ab. |
Re: C++ = C++ ?
Nein, das stimmt nicht. Und selbst wenn der Standard es vorschreiben würde, würde jeder Compiler es wegoptimieren.
Zitat:
Aber es sagt genau das:
Code:
ist keine Zuweisung, sondern eine Initialisierung und damit erfolgt genau ein Konstruktoraufruf.
int i = 0;
Edit: Das Zitat oben stammt aus der Dokumentation zu einem der ![]() |
Re: C++ = C++ ?
Zitat:
Du kannst zwar um der Konsistenz willen Konstruktoren (mittels Placement New) und Destruktoren von POD-Typen aufrufen, jedoch sind solche Aufrufe wirkungslos. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz