frage zu: int&
-
Ich schrieb:
aber was passiert genau bekommt v1 und v2 die adresse von Wert1 und Wert2 zugewiesn? Ist v1 somit ein Zeiger auf Wert1 und v2 ein Zeiger auf Wert2?
dann hatte ich ja hier mit recht!
ok danke mfg hohesC
-
enno-tyrant, du scheinst die Sprachkonzepte selbst noch nicht verstanden haben.
std ist keine Klasse und if ist keine Schleife. Nicht gut, das den Neulingen einzutrichtern.
-
demzufolge wären bei dir 'struct' oder 'union' auch keine klassen
nur weil es nicht mit 'class bla' beginnt.
schauen wir uns doch mal den aufbau eines namensraumes an:
namespace util { int zaehler; void sucheAnfang(string s); int sucheEnde(string s); }
kann mir nicht helfen aber irgendwie erinnert mich das an etwas.
es sollte einfach nur als vergleich dienen
und wer sagt das if eine schleife wäre?
-
Er hat doch nicht von if schleife gesprochen(oder ist das aus einem andern Thread?), ich wüsste ausserdem selber das if nix mit schleifen zu tun hat.
Ich bin nur C++ neuling aber nicht programmier neuling, da ich in C Programmiere!was ist std:: dann kan das mir jetzt irgendwer verklickern?
mfg hohesC
-
ich bin ja nichtmal der einzige der klassen und namensräume zum vergleichen/erklären nimmt
http://www.willemer.de/informatik/cpp/cppnames.htm schrieb:
Einzelfunktion
Die Funktion sucheEnde() wurde nicht in der Datei util.cpp definiert. Wenn sie an anderer Stelle implementiert wird, kann der zugehörige Namensraum auch so gekennzeichnet werden, wie es bei Elementfunktionen von Klassen gemacht wird.
-
Sie damit zu erklären ist was anders als zu behaupten sie wären es. Ich sag dir ja auch nicht dass ein Fahrrad ein Auto ist nur weil's auf der Straße fährt.
http://www.c-plusplus.net/forum/viewtopic.php?p=720341#720341
-
enno-tyrant schrieb:
demzufolge wären bei dir 'struct' oder 'union' auch keine klassen
nur weil es nicht mit 'class bla' beginnt.
schauen wir uns doch mal den aufbau eines namensraumes an:
namespace util { int zaehler; void sucheAnfang(string s); int sucheEnde(string s); }
kann mir nicht helfen aber irgendwie erinnert mich das an etwas.
es sollte einfach nur als vergleich dienen
und wer sagt das if eine schleife wäre?
Nein, ist keine Klasse, sondern ein Namespace. Steht doch da?! Nur weil ein Motorrad und ein Fahrrad auch zwei Räder haben, sind sie doch nicht das gleiche Ding, oder?
Das deine Beispiele "gleich" aussehen und an etwas erinnern, hat sicherlich damit zu tun, das es etwas mit Compilerbau zu tun hat um leichter den Code zu parsen. Man kann ja nicht für jeden Mist eine neue Syntax einführen, ganz davon abgesehen, das man als Programmierer sich den Mist auch noch merken müsste.
Also, namespaces sind keine Klassen. Man kann sie auch nicht instanzieren, wie Klassen. Somit ist deine Argumentation schon mal hinfällig.
-
ach den thread hast du gemeint, war beim schreiben wohl mit den gedanken woanders
und was heißt ich behaupte es wäre eine klasse? hast du den gesamten thread gelsen? zugegeben ich hatte mich etwas unverständlich ausgedrückt aber zu verstehen war es dennoch
-
@endline er hat seine "if-schleife" korigiert
http://userpage.fu-berlin.de/~ram/pub/pub_w33d45lg/c++_namensraum_de
ich google nächstes mal einfach! :p
mfg hohesC
-
Alles, aber hauptsache nicht den eigenen Fehler eingestehen. Mann, du bist doch auch nur ein Mensch.
-
enno-tyrant schrieb:
und was heißt ich behaupte es wäre eine klasse? hast du den gesamten thread gelsen?
enno-tyrant schrieb:
std ist eine Klasse
Hört sich für mich ziemlich eindeutig an.
hohesC schrieb:
und warum eigentlich "int&" <-hat bestimt was mit zeigern zu tun
Nicht wirklich. int& ist eine Referenz. Wie ein Compiler sowas implementiert, ist ihm überlassen. Da es wohl am einfachsten ist, werden gängige Compiler sowas über Zeiger realisieren. Du solltest aber auf jedenfall Referenzen und Zeiger logisch trennen. Es gibt jedoch Möglichkeiten, das eine in das andere umzuwandeln
Address Operator, Dereferenzierung
Was machen nun die Referenzen in deinem Beispiel? Wie du sicherlich weisst, werden Funktionsparameter (Ausnahme Arrays) by-value übergeben
void foo(int x);
x ist hier eine Kopie des übergebenen Wertes. Alles was du mit x machst, hat keinerlei Einfluss auf die übergebene Instanz. Jetzt kommmt also unsere Referenz ins Spiel.
void foo(int& x);
Damit "erzeugst" du praktisch ein Alias, x ist somit die übergebene Instanz selbst. Damit hast du also die Möglichkeit, diese auch zu verändern (sofern nicht const übergeben). Referenzen haben zudem auch noch andere Vorteile. So sollte man zB grosse Strukturen immer per Referenz übergeben, damit spart man sich das Erstellen der Kopie auf dem Stack.
Für mehr Infos würde ich dir empfehlen, ein gutes Tut über Referenzen durchzuarbeiten.an die Mods:
Wieso gibt es in den FAQs kein Topic "Referenzen - was ist das"?
-
//edit hmm da war wohl nochn altes fenster auf Oo irgendwie ein paar stunden zu spät^^
//edit2 so muss dem post ma nen neuen sinn geben
Also, namespaces sind keine Klassen. Man kann sie auch nicht instanzieren, wie Klassen. Somit ist deine Argumentation schon mal hinfällig.
und noch ein punkt:
class Foo{ //... }; using namespace Foo; int main(){ //... }
test.cpp:5: error: expected namespace-name before ';' token test.cpp:5: error: `<type error>' is not a namespace
hmm wenn uing nicht klappt, kann std auch keine klasse sein