Problem beim erstellen eines Objekts mit new
-
Okay danke habs verstanden. mal ne andere Frage: Hab gelesen dass inline klassenmethoden schneller verarbeitet werden als die normalen. kann ich dann nicht einfach alle methoden Inline machen, sofern die größe der datei keine rolle spielt??
-
wasd schrieb:
Okay danke habs verstanden. mal ne andere Frage: Hab gelesen dass inline klassenmethoden schneller verarbeitet werden als die normalen.
Kann man gar nicht mehr allgemein so sagen. Manchmal ist outline auch schneller, wegen Cache-Lokalität. Der Compiler macht automatisch die inline, die er für würdig hält, und kann die Funktionen schon verflixt gut einschätzen.
-
Ahh okay, eine Frage hab ich noch

Hab schon öfters gesehen, das char* pointer für Zeichenketten benutzt werden.
in diesem Beispiel zeigt der pointer ja auf das erste byte des Strings, also das "T".
char *t; t = "Test!"; cout << t;Ich versteh nicht, wie das Programm funktionieren kann, da erstens bei der initialisierung der * vor dem t fehlt und die Ausgabe dann doch eigentlich die Adresse sein müsste?
und zweitens woher weiß das Programm bei cout << t die Länge des Strings?
-
Erstens muss es
const char* t = "blubb";heißen.
Zweitens hat jedes string-Literal eine Adresse, auch wenn das zuerst komisch erscheint. Der string liegt aber in einem Read-Only bereich, du darfst da also nichts ändern.C-Strings sind 0-terminiert, das heißt, der string hat am Ende immer eine 0, nicht '0' oder "0" sondern 0. Die Länge des String "muh" ist damit 4.
-
Der Code funktioniert garnicht (undefiniertes Verhalten) Der Pointer zeigt auf irgendeine Adresse. Es wurde weder eine gültige Adresse auf dem Stack angegeben ) noch Speicher auf dem Heap für den String reserviert. Wie ich in meinem Post vorher schon erläutert habe.
Ein String wird immer mit '\0' abgeschlossen. somit hat ein char array[6] auch nur maximal 5 Zeichen, da das Sechste für die Nullterminierung benötigt wird. Strings in Anführungszeichen angegeben haben eine Nullterminierung.
-
HighLigerBiMBam schrieb:
Der Code funktioniert garnicht (undefiniertes Verhalten) Der Pointer zeigt auf irgendeine Adresse. Es wurde weder eine gültige Adresse auf dem Stack angegeben ) noch Speicher auf dem Heap für den String reserviert. Wie ich in meinem Post vorher schon erläutert habe.
Bei mir gehts schon die ausgabe ist "Test!"
soweit ich weiß ist
char* t = "blubb";die verkürzte version von
char *t; t = "blubb";
-
Nein, die richtige

-
314159265358979 schrieb:
Nein, die richtige

okay und was ist an der anderen falsch??
-
Das const fehlt.
-
314159265358979 schrieb:
Das const fehlt.
vielleicht sollte meine Variable auch gar keine Konstanste sein?

-
Wenn du den string so zuweist, MUSS sie const sein.
-
wasd schrieb:
Ich versteh nicht, wie das Programm funktionieren kann, da erstens bei der initialisierung der * vor dem t fehlt und die Ausgabe dann doch eigentlich die Adresse sein müsste?
Du weist die Adresse des Stringliterals dem
char-Zeiger zu. Die Ausgabe funktioniert, weil der Stream-Operator fürchar*überladen ist.wasd schrieb:
vielleicht sollte meine Variable auch gar keine Konstanste sein?
Ist sie so oder so nicht. Aber der Zeiger soll auf
constzeigen. "Der string liegt aber in einem Read-Only bereich, du darfst da also nichts ändern." Daher ist bei Stringliteralen nurconst char*sinnvoll.Wo liegt dein momentanes Problem?
-
Hast du das gelesen?
wasd schrieb:
soweit ich weiß ist
char* t = "blubb";die verkürzte version von
char *t; t = "blubb";Nein. Kürzlich gab es wieder ein Thread darüber. Der erste Code ruft den Ctor auf und der zweite den Zuweisungsoperator. Bei korrekter Implentierung spielt es keine Rolle. Aber beim ersten wird der Ctor aufgerufen und beim zweiten wird der Ctor und der Zuweisungsoperator aufgerufen.
-
EOutOfResources schrieb:
Der erste Code ruft den Ctor auf
char*hat keinen Konstruktor. Bei skalaren Typen macht sind beide Schreibweisen äquivalent. Allerdings ist eine schnelle Initialisierung zu bevorzugen, bei der zweiten Version sehe ich keine Vorteile.