Daten einlesen, neu schreiben
-
SeppJ schrieb:
Du castest Case-Marken?
Halte ich an dieser Stelle nicht für völlig abwegig - wenn man mit den Promotionsregeln nicht fest vertraut ist. Der einzige (für Portabilität) erforderliche Cast ist hier nat. nur der im Auswahlausdruck.
Sone schrieb:
Also ich benutze, genau wie Volkard es einmal angedeutet hat (kann das Zitat nicht finden), um Skalare o.ä. zu casten nur function-style-casts.
Komisch, dabei sind es doch gerade Casts, bei denen Skalare involviert sind, die überhaupt nur richtig gefährlich sein können.
-
camper schrieb:
Sone schrieb:
Also ich benutze, genau wie Volkard es einmal angedeutet hat (kann das Zitat nicht finden), um Skalare o.ä. zu casten nur function-style-casts.
Komisch, dabei sind es doch gerade Casts, bei denen Skalare involviert sind, die überhaupt nur richtig gefährlich sein können.
In meinem Code gibt es keine gefährlichen Casts. Ich habe größtenteils nur unbedeutenden Fälle, wie: Cast in einer initializer-list um narrowing zu umgehen. Ich caste nie Zeiger hin oder her, jedenfalls nicht in eigenen Projekten. Nur
If the expression list is a single expression, the type conversion expression is equivalent (in definedness, and if defined in meaning) to the corresponding cast expression (5.4).
@SeppJ: Wie kann ein function-style-cast also nicht gefährlich sein? Er stellt dasselbe wie ein C-Cast dar.
-
Sone schrieb:
@SeppJ: Wie kann ein function-style-cast also nicht gefährlich sein? Er stellt dasselbe wie ein C-Cast dar.
Na, dann, wenn du ihn nur ganz bewusst in unkritischen Fällen einsetzt, die unter keinen Umständen umgedeutet oder uneindeutig werden können. Ich hatte gedacht/gehofft, dass du eben diese Fälle meinst, in denen du die Casts so einsetzt.
-
SeppJ schrieb:
Programmier doch einfach vector nach. Dein komischer Kollege merkt bestimmt ohnehin nicht. Oder mach sogar eine Kopie einer Open-Source vector-Implementierung, damit es auch gut ist, und nenn die Klasse um. Dann passieren solche Fehler einfach nicht mehr und du sparst Unmengen Zeit bei der Fehlersuche.Der Fehler kam durch ein fehlendes delete! Also ist genau der Fall eingetroffen vor dem ihr mich immer gewarnt habt! Ich danke euch noch mal hier das ihr obwohl ich nur mist Poste immer noch beisteht und zeigt wie es richtig geht.
Klassen Namen werde ich noch mal überdenken.
Das mit dem vector nach Programmieren könnte man echt hier fast so sehen. Nur in langsamer.
SeppJ schrieb:
P.S.: Du castest Case-Marken?
Noch dazu mit C-Style Casts? Hast du das auch von deinem Kollegen, der nicht weiß, was Casting ist? Literalen kannst du einen Typ geben. 0uist zum Beispiel ein unsigned int. Und Casting machen wir wenn dann sowieso nur mit C++-Casts, bei den C-Casts ist nicht eindeutig, was sie überhaupt machen und eine Änderung an einer ganz anderen Stelle im Programm könnte somit eine Katastrophe auslösen und aus einem static_cast einen reinterpret_cast machen.Ehm ja wurde mir alles so gezeigt und static_cast darf ich ja nun nicht benutzen. Bleibt ja nur der C-cast.

Ja ich sollte das so casten. Ich wusste nicht das man das auch anders lösen kann. Mir wurde der cast gesagt aber das auch einfach 0xd8 reicht wusste ich nicht. Danke!
Also es funktioniert jetzt so:case 0xd8:Allerdings muss dann im switch das bleiben:
switch((unsigned char)Buff[i])){
-
Fuchs aus dem Wald schrieb:
Ehm ja wurde mir alles so gezeigt und static_cast darf ich ja nun nicht benutzen. Bleibt ja nur der C-cast.

WTF! Hast du deinem Profiprogger denn nicht mal das Beispiel aus deinem letzten Thread gezeigt?
struct strange { operator int() { return !(std::cout << "Diese Operation ist nicht threadsafe!" << std::endl); } }; int main() { strange s; static_cast<int>(s); (int)s; }
-
Problem

Sowas will er nicht hören! Und da ich ja eh hier der Anfänger bin hab ich keine Ahnung.
-
bar.h
class Bar{ public: Bar(); ~Bar(); void read(); private: const char* Buffer; Foo* foo; };foo.h
class Foo{ public: const char*getFooFii(); void setFii(const char* fii); private: const char* FII[4]; };bar.cpp
Bar::Bar(){ foo = new Foo; } Bar::~Bar(){ delete foo; } void Bar::read(){ //liest datei in Buffer ein //sucht punkte in Buffer foo->setFii(Buffer[i]); }Habe ich recht, wenn ich sage, dass wenn ich mir aus einer anderen Klasse jetzt getFooFii() aufrufe ich zwar ein pointer habe aber sobald ich dann sowas mache wie foo+1.. oder foo[1..] dann hab ich undefinertes verhalten?
Also:const char* foo = foo->getFooFii(); std::cerr << *foo+1 << \n;