C++ oder C++
-
Hallo zusammen!
Ich hab ein Problem:
Ich schreibe einfach mal ein Beispiel:
Hello.cpp v1#include <iostream>
int main()
{
cout << "Hello World\n";
return 0;
}Das habe ich aus dem Buchjetzt lerne ich C++ con Markt und Technik
Hello.cpp v2
#include <iostream>
using namespace std;int main()
{
cout << "Hello World" << endl;
return 0;
}gibt es nur kleine unterschiede??? welches soll ich nehemen???
danke im voraus max
-
also das mit Titel wählen musst du nochmals üben
-
das ist toll wenn du mir sagst das ich das mit dem titel nochmal üben muss nur hätte ich ganz gerne beiträge die mir was bringen von daher kannst du dir das posten auch sparen und alle andren die meinen sie müssten einen solchen beitrag schreeiben können dies auch lassen da ich diese ignorieren werde!!!!!!!
mfg max
-
Wenn du ein namespace benutzt in Beispiel zwei sollte es auch was bringen.
mit std kannste so tolle sachen machen wiestd::cout <<"so gehts";
.
Mir ist eigentlich egal wie ich eine Ausgabe in einer Konsolenanwendung gestalte.
Da sind jetzt die Profis gefragt, die noch was zum Thema Effektivität sagen können.
-
wie ich das ohne namespace mach war mir schon klar ich wollte eigentlich was über effektivität wissen und noch eon prob:
für v1 hab ich ein buch und massig tutorials
für v2 hab ich ein oder zwei ganz kurze tutorials wo drinsteht wie ich das klassische hello.cpp schreibe!!!
aber trotzdem danke für den beitrag!mfg max
-
Hm, effektiver ist in diesem Fall wohl Version 1, da der Output-Stream dort nicht 'geflushed' wird. Das endl flushed den Output-Stream. Kostet nur Rechenzeit, ist in diesem Fall nicht nötig. Details stehen in der Hilfe.
Der Titel ist in der Tat nicht besonders aussagekräftig. BigNeals Kritik ist durchaus gerechtfertigt.
-
erstes wird IMHO so nicht funktionieren da cout nicht bekannt ist.
#include <iostream> int main() { std::cout << "Hello World\n"; return 0; }
-
Versteh ich nicht? Wo ist cout nicht bekannt?
-
cout liegt im namespace std, das bedeutet (eigentlich) musst du entweder
std::cout...
oder
using namespace std; ... cout...
schreiben
-
Also, wenn du mit den neuen Klassen arbeiten möchtest:
#include <iostream> using std::cout; using std::endl; int main() { cout << "ich bin der nette Johannes." << endl; return 0; }
Nun zu deiner eigentlichen Frage:
Was ist der Unterschied zwischen "\n" und "std::endl"?
"\n" ist einfach nur ein Zeilenumbruch, während "std::endl" auch den Buffer leert.
Ich würde "std::endl" nutzen, da dann das Bild einheitlich ist.
-
Es gibt 2 wesentliche Unterschiede zwischen den beiden Programmen:
zuerst der kleine:V1 macht eine Neue Zeile, indem es
[cpp]
cout << "Hello World**\n**";
[/cpp]ein '\n' am Ende des Strings anhaengt. Programm zwei hingegen verwendet "endl".
Der Unterschied zwischen den beiden ist sehr gering. Im Grunde ist es besser (effizienter, schneller), mit '\n' neue Zeile zu machen. Aber das ist echt eine Kleinigkeit und jeder machts so, wie er's lieber macht: Geschmackssache eben
Der zweite, wesentlich wichtigere Unterschied:
PROGRAMM EINS IST NICHT GUELTIGES C++
Ganz krass gesagt. Ich hab jetzt leider keinen Link parat, der erklaert, warum man <iostream> ohne ".h" schreibt und wieso man "using namespace std;" verwenden soll, aber das gehoert sich so.
Frueher, in dunkler, grauer Vorzeit hat die Iostream-Datei noch "iostream.h" geheissen, und alles war ok. Als sich das ISO Komittee dann aber zusammengesetzt hat und C++ standardisiert hat, wurden einige Aenderungen in der C++ Standardbibliothek ( <== das sind iostream, vector, usw.) vorgenommen. Eine davon war, dass nun alles, was zu der Standardbibliothek gehoert, in den Namespace "std" zu legen.
Was genau Namespaces sind, wirst du sicher spaeter noch lernen. Fuer jetzt reichts fuer dich aus zu wissen, dass du, um auf die Elemente des Namespace std zuzugreifen (z. B. liegt "cout" in diesem Namespace), am Anfang deines Quellcodes ein "using namespace std;" schreiben musst.
Um die "alten" Bibliotheken, die nun nicht mehr gueltig waren, von den neuen zu unterscheiden, lies man am Dateiende einfach das ".h" weg. Die Iostream-Datei heisst jetzt also einfach nur noch "iostream" (statt "iostream.h").
Die "alten" Bibiotheken wurden als "veraltert" erklaert und sollen nicht mehr verwendet werden.Wenn du's also 100%ig korrekt haben willst, nimm die 2te Version
-
ich finde es unlogisch, dass man immer using namespace schreiben sollte, da man dann das konzept mit namespaces zur namenskonfliktsvermeidung teilweise wieder aufhebt da alle namen aus std abgekürzt werden.
-
Macht man auch nicht immer. Z.B. sollte man es nie in Header-Dateien machen. Aber bei kleineren Programmen kein Problem.
-
Lesco schrieb:
ich finde es unlogisch, dass man immer using namespace schreiben sollte
Musst du auch nicht. Genauso gut kannst du using Deklarationen verwenden (siehe hehejo).
-
Blue-Tiger schrieb:
Der Unterschied zwischen den beiden ist sehr gering. Im Grunde ist es besser (effizienter, schneller), mit '\n' neue Zeile zu machen.
Wieso solls besser sein? Ich hab mich in meinen Anfängen mal gewundert, wieso eine Ausgabe nicht erschien, auf die eine längere Rechnung folgte. Bei '\n' wird nicht geflusht, das heißt es wird nicht ausgedruckt, was du geschrieben hast.
Ich hab jetzt leider keinen Link parat, der erklaert, warum man <iostream> ohne ".h" schreibt und wieso man "using namespace std;" verwenden soll, aber das gehoert sich so.
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=iostream#Answ
-
erstmal danke für die ganzen guten beiträge!
da einige meinen v1 funktioniert nicht: ich hab diesen source code aus dem buch
jetzt lerne ich C++ von Markt und Technik ganz genau übernommen!
das buch hab ich dezember 04 gekauft!!! und es ist jetzt schon veraltet!ich würde ja gerne v2 verwenden aber weis jemand ein gutes buch oder großes tutorial im web??? (das buch kann ich auch kaufen)
mfg max