align

Wieso sollte ich nicht string.h nehmen mencpy ist dort auch definiert.
C kennt keine Namensräume. C++ erlaubt Funktionen zu überladen. Im C Header dürfen manche Funktionen als Makros implementiert werden, was in C++ nicht zweckmäßig ist. In C++ werden Header der C Standardbibliothek immer ohne Endung und mit dem Präfix "c" eingebunden.

Gruß
 
und wieso sollte ich bitteschön ekin using namepsace in nem header benutzen?
Ich hab davon ja karkein cpp Datei sondern alles in die .h reingekloppt ausnahmsweise
 
achso das hatte ich falsch verstanden " ;" überlesen
Code:
dann niemals using namespace std
Dann bene wieso das nicht?
 
Falsches Zitat. [...] im Header" fehlt. Hm solltest du drauf kommen wenn du überlegst wofür Namensräume existieren, was passiert wenn man deinen Header dann einbindet usw... ;)
 
Achso ja dann ist dieser Namensraum überall vverfügbar wo ich den Header einbinde.
Aber das ist ja eigentlich nicht schlimm. Das veralngsamt ja auch nicht mein Programm und falls ich ein Funktion habe die genau so heißt wird diese automachtisch genommen.
Naja ich werde es ab sofort berücksichtigen.
 
Hallo,

Achso ja dann ist dieser Namensraum überall vverfügbar wo ich den Header einbinde.
Aber das ist ja eigentlich nicht schlimm. Das veralngsamt ja auch nicht mein Programm und falls ich ein Funktion habe die genau so heißt wird diese automachtisch genommen.
Naja ich werde es ab sofort berücksichtigen.

folgendes Beispiel:

foo.h:
C++:
#include <string>

using namespace std;

class Foo {
    private:
        string some_member;

    public:
        void do_foo() {
             /* do nothing */
        }
};

Jemand könnte jetzt deine Klasse Foo nutzen in dem guten Glauben das er dann trotzdem noch alles machen kann was er für richtig hält:

foo_application.cpp:
C++:
#include <foo.h>

typedef char * string;

void do_some_other_stuff(string param) {
  /* do nothing */
}

int main() {
    string word = "Blub";
    Foo f;

    do_some_other_stuff(word);

    f.do_foo();
}

Weit gefehlt. Es kommt zu einer Doppeldeutigkeit, da der Datentyp string jetzt zwei mal im globalen Scope definiert ist. Der Anwender deiner Klasse kann sich beim besten Willen nicht erklären woher das kommen soll. Er hat doch alles richtig gemacht. Deswegen wäre es besser sowas zu vermeiden.
Wenn deine Applikation hinreichend komplex wird, kann sich der Spieß auch leicht mal rumdrehen und der Anwender bist du selbst. Und auch wenn Compilerfehler weit weniger schlimm sind als Laufzeitfehler, kann die Suche trotzdem manchmal recht haarig werden. V.a. wenn die "Inkludierhierarchie" entsprechend groß ist, was man allerdings ebenfalls vermeiden sollte. (don't include headers within headers)

Gruß,
RedWing
 
Zurück