Gleich 0?
-
Hi, in dem Buch von B. Stroustrup steht, das z.B
int a;
a gleich den Wert 0 hat. In anderen Quellcodes sehe ich manchmal das dort dann
aber explizit a mit 0 initalisiert wird, quasi eine doppel-Initalisierung??
-
Das steht ganz sicher nicht im Struppi. Nur statische Variablen werden automatisch mit 0 bzw. mit ihrem default-Konstruktor initialisiert, wenn nichts anderes angegeben ist.
-
Einfach alles selbst ausprobieren:
#include <iostream> #include <conio.h> namespace MyCpp { double variable; } float variable; int main() { int variable; std::cout << "globale Variable : " << ::variable << std::endl; // 0 std::cout << "lokale Variable : " << variable << std::endl; // irgendetwas std::cout << "Variable im Namespace: " << MyCpp::variable << std::endl; // 0 getch(); }
Lokale Variablen werden nicht mit 0 vorbelegt, globale dagegen schon.
-
Erhard Henkes schrieb:
Einfach alles selbst ausprobieren:
Manchmal ist es aber schon Interesannt wie es wie es im Standard steht und nicht wie es der Compiler x handhabt....
Ich erinnere mich an einem Lehrer der folgendes an die Tafel schrieb weil er es ausprobiert hat:
char * result = foo() { char t[] = "Hallo"; return t; } cout<<foo();
-
Erhard Henkes schrieb:
Einfach alles selbst ausprobieren:
#include <iostream> #include <conio.h> std::cout << "globale Variable : " << ::variable << std::endl; // 0 std::cout << "lokale Variable : " << variable << std::endl; // irgendetwas std::cout << "Variable im Namespace: " << MyCpp::variable << std::endl; // 0
Lokale Variablen werden nicht mit 0 vorbelegt, globale dagegen schon.
Is mir jetzt schon öfters aufgefallen:
Warum schreibt ihr nichtusing namespace std;
in den Kopf, dann würdet ihr euch Tipparbeit sparen.
Bin C++-Einsteiger, deshalb würde ich gern den tieferen Sinn dieser umständlichen Schreibweise erfahren
-
der_Spekulant schrieb:
Warum schreibt ihr nicht
using namespace std;
in den Kopf, dann würdet ihr euch Tipparbeit sparen.
Bin C++-Einsteiger, deshalb würde ich gern den tieferen Sinn dieser umständlichen Schreibweise erfahrenbei so kurzen beispiel ist das using namespace std; sicher nicht verkehrt.
aber wenn du in deinen projekten using namespace std; schreibst - dann hebst du die wirkung des namespace std auf - dh du kommst wieder zu den selben problemen die es vor namensraeumen gab (zB namenskonflikte)
-
Hallo,
wobei ich das Problem nicht sehe, wenn man eine simple Regel beachtet: Weder using-Direktiven noch Using-Deklarationen gehören in einen Header.
In cpp-Dateien kann ich wirkliches nichts schlimmes daran erkennen.
Sollte es zu Namenskonflikten kommen, dann sind diese lokal zu genau einer cpp-Datei. Ich kann also problemlos die entsprechende using-Geschichte wegnehmen und gut.Oder übersehe ich hier gerade etwas?
-
HumeSikkins schrieb:
Oder übersehe ich hier gerade etwas?
mehrdeutigkeiten fuer den programmierer?
angenommen es gibt einen namenskonflikt weil es std::vector und math::vector gibt. wenn man jetzt
using namespace std;
macht - und der leser sieht irgendwo vector - weiss er nicht sofort ob es std::vector oder math::vector ist.aber wenn es keine konflikte gibt, ist sind die using direktiven nicht schlimm.
-
Er würde es daran erkennen, das mal vector und mal math::vector im Code zu finden ist.
Und selbst wenn beide Namensräume dur using bekannt würden müsste doch bei Mehrdeutigkeit expliziet angegeben werden, was gemeint ist. Man spart sich also weiterhin tipparbeit bei nicht eindeutigem und bei mehrdeutigen muss man eben qualifizieren.