So true. Seit Jahren gehört es zu meinem ersten Schritt vorm Anlegen einer Sicherheitskopie, die Ordnerstruktur zu durchsuchen und alle thumbs.db sowie die meisten desktop.ini zu löschen.eXile hat geschrieben:Jetzt darf ich meine Datenträger nie wieder an ein Windows-XP-System anschließen. Ist ja wie eine Infektion.
Jammer-Thread
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
-
- Establishment
- Beiträge: 467
- Registriert: 18.04.2002, 15:31
Re: Jammer-Thread
Mir ist gerade aufgefallen, dass es den Compiler in keinster Weise stört, wenn ich eine const Instanz verändere, indem ich eine const-Methode darauf aufrufe, welche intern eine globale Funktion aufruft, die schreibend auf die Instanz zugreift. Weder VS noch Clang schmeißen auch nur ein Warning.
Argh.
Das heißt also, ich mache die Methoden const, wenn die von ihnen aufgerufenen Funktionen in der aktuellen Implementation die Objektinstanzen nicht verändern und wenn sich deren Implementation irgendwann mal ändert, bin ich gearscht, weil ich dann plötzlich ohne es zu wollen, das const umgehe, und zwar weit subtiler, als wenn man da wenigstens einen const-cast hätte :?
Argh.
Das heißt also, ich mache die Methoden const, wenn die von ihnen aufgerufenen Funktionen in der aktuellen Implementation die Objektinstanzen nicht verändern und wenn sich deren Implementation irgendwann mal ändert, bin ich gearscht, weil ich dann plötzlich ohne es zu wollen, das const umgehe, und zwar weit subtiler, als wenn man da wenigstens einen const-cast hätte :?
Code: Alles auswählen
void gFoo(int* pFoo)
{
*pFoo = 7;
}
class Test
{
public:
Test(void);
~Test(void);
void foo(void) const;
private:
int* mFoo;
};
Test::Test(void)
{
mFoo = new int;
}
Test::~Test(void)
{
delete mFoo;
}
void Test::foo(void) const
{
gFoo(mFoo);
}
int main(void)
{
const Test test;
test.foo();
return 0;
}
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
Re: Jammer-Thread
@kaiserludi: Das ist völlig korrekt so. Das Objekt selbst wird nicht verändert, nur der Wert auf den der Zeiger zeigt (was nicht mehr in den Aufgabenbereich der Klasse fällt).
-
- Establishment
- Beiträge: 467
- Registriert: 18.04.2002, 15:31
Re: Jammer-Thread
Tatsache, wenn ich aus dem int* ein int mache und dessen Adresse an gFoo weiterreichen will, gibts doch tatsächlich eine Fehlermeldung, dass ich explizit das const wegcasten muss :)Biolunar hat geschrieben:@kaiserludi: Das ist völlig korrekt so. Das Objekt selbst wird nicht verändert, nur der Wert auf den der Zeiger zeigt (was nicht mehr in den Aufgabenbereich der Klasse fällt).
Code: Alles auswählen
void gFoo(int* pFoo)
{
*pFoo = 7;
}
class Test
{
public:
Test(void);
void foo(void) const;
private:
int mFoo;
};
Test::Test(void)
{
mFoo = 0;
}
void Test::foo(void) const
{
gFoo(&mFoo);
}
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Zeiger implizieren keine Besitzrechte; Referenzen und direkte Instanzierung hingegen schon. Der Grund ist, dass du im Falle eines Zeigers nur den Zeiger verwaltest und nicht das Objekt dahinter. Referenzen sind hingegen völlig transparent und direkte Instanzen sowieso – dort kannst du nichts anderes verwalten als das Objekt.
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Wie nahezu alles lässt sich auch ein Zeiger mit Besitzsemantik einfach in ein Template verpacken. (Muss ja irgendeinen Nutzen haben, dass ich diesen ganzen Quelltext online habe. :P)
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
- Schrompf
- Moderator
- Beiträge: 5047
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Jammer-Thread
Erkenntnis: TGA ist eigentlich ganz simpel, wenn man bemerkt hat, dass die Wikipedia-Artikel zu dessen Header einen anlügen. Das letzte Header-Byte enthält angeblich die Anzahl Bits des Alphakanals, plus ein paar Flags. Wenn man da aber korrekt "8" reinschreibt, interpretieren alle Zeichenprogramme, die ich hier dahabe, das Bild als "ohne Alpha" mit 24bit pro Pixel. Testweise also mal "7" reingeschrieben und plötzlich sehe ich meinen Alphakanal in allen Programmen.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- Lynxeye
- Establishment
- Beiträge: 145
- Registriert: 27.02.2009, 16:50
- Echter Name: Lucas
- Wohnort: Hildesheim
- Kontaktdaten:
Re: Jammer-Thread
Einheitliche Grafiktreiber schreiben nervt manchmal ganz schön. Zwei Wochen lang ein neues Feature ausgearbeitet, lange auf meiner GeForce 7 getestet, danach noch ein bisschen Refactoring betrieben und nach dem Veröffentlichen festgestellt, dass ich damit auf der GeForce FX einiges eingerissen habe.
Letztendlich lag es daran, dass die GeForce FX einen Hardwarebug hat und deshalb nach dem Verändern des Rasterizer States der Viewport neu validiert werden muss.
Letztendlich lag es daran, dass die GeForce FX einen Hardwarebug hat und deshalb nach dem Verändern des Rasterizer States der Viewport neu validiert werden muss.
-
- Establishment
- Beiträge: 467
- Registriert: 18.04.2002, 15:31
Re: Jammer-Thread
Ah, Syntaxdetails sind doch was tolles :D
JString tmp = rand(); // initialisiere einen leeren String und reserviere einen Buffer für rand() Buchstaben
JString tmp; tmp = rand() // initialisiere einen leeren String mit der default-Buffersize und speichere dann die string-representation von rand() darin
Wer hat sich ausgedacht, dass bei MyClass foo = 1 der Konstruktor MyClass(int param) aufgerufen wird, statt dem Zuweisungsoperator und warum?
JString tmp = rand(); // initialisiere einen leeren String und reserviere einen Buffer für rand() Buchstaben
JString tmp; tmp = rand() // initialisiere einen leeren String mit der default-Buffersize und speichere dann die string-representation von rand() darin
Wer hat sich ausgedacht, dass bei MyClass foo = 1 der Konstruktor MyClass(int param) aufgerufen wird, statt dem Zuweisungsoperator und warum?
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
Re: Jammer-Thread
Kannst den Konstruktor als explicit markieren, dann geht es nicht mehr.kaiserludi hat geschrieben: Wer hat sich ausgedacht, dass bei MyClass foo = 1 der Konstruktor MyClass(int param) aufgerufen wird, statt dem Zuweisungsoperator und warum?
-
- Establishment
- Beiträge: 467
- Registriert: 18.04.2002, 15:31
Re: Jammer-Thread
Ah, sehr schön. Das liebe ich an C++: Es gibt für praktisch jedes Problem eine elegante Lösung und nicht wie bei anderen Sprachen: "Gibts nicht" :)condor hat geschrieben:Kannst den Konstruktor als explicit markieren, dann geht es nicht mehr.kaiserludi hat geschrieben: Wer hat sich ausgedacht, dass bei MyClass foo = 1 der Konstruktor MyClass(int param) aufgerufen wird, statt dem Zuweisungsoperator und warum?
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Jammer-Thread
Dann brauchst du aber auch einen eigenen Zuweisungsoperator für int oder einen Cast ;)
-
- Establishment
- Beiträge: 467
- Registriert: 18.04.2002, 15:31
Re: Jammer-Thread
Den eigenen Zuweisungsoperator dafür hatte ich seit eh und je und den wollte ein Kollege aufrufen und hat stattdessen den Konstruktor aufgerufen, welcher leider etwas völlig anderes bewirkt.dot hat geschrieben:Dann brauchst du aber auch einen eigenen Zuweisungsoperator für int oder einen Cast ;)
War zwar schnell und leicht gefunden beim Debuggen, aber wenn der Compiler gleich meckert, wie nun dank explicit, dann ist das doch um einiges angenehmer.
"Mir ist auch klar, dass der Tag, an dem ZFX und Developia zusammengehen werden der selbe Tag sein wird, an dem DirectGL rauskommt."
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
DirectGL, endlich ist es da :)
"According to the C++ standard, it's "undefined". That's a technical term that means, in theory, anything can happen: the program can crash, or keep running but generate garbage results, or send Bjarne Stroustrup an e-mail saying how ugly you are and how funny your mother dresses you." :shock:[/size]
- Schrompf
- Moderator
- Beiträge: 5047
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Jammer-Thread
Ich Will Endlich ForEach-Unterstützung In Visual Studio, verdammichnocheeinsundkruzisauerlabbenstorch! Ich habe die Nase voll von Hundert "for( auto it = bla.cbegin(); it != bla.cend(); ++it )" jeden Tag.
Was ist denn bitte das Problem dabei? Vermutlich sowas wie beim D3D Shader Compiler und diversen anderen Microsoft-Projekten... it got down-prioritized.
Was ist denn bitte das Problem dabei? Vermutlich sowas wie beim D3D Shader Compiler und diversen anderen Microsoft-Projekten... it got down-prioritized.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Re: Jammer-Thread
Bau dir doch ein macro :)
- Schrompf
- Moderator
- Beiträge: 5047
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Jammer-Thread
Weiche, Geist! Der Schwefelgeruch verrät Deine Absichten! Du wirst mich nicht verlocken!simbad hat geschrieben:Bau dir doch ein macro :)
Boost hat ja ein nettes ForEach, dass auch nicht ganz ohne Makro auskommt. Leider produziert jede Verwendung eine Warnung, die ich ganz ehrlich nichtmal verstehe. Und ich seh das auch gar nicht ein, wenn doch der C++11-Standard sowas doch schon vorsieht! Nur muss das halt auch vom Compilerbauer gewünscht sein. Und das wird wahrscheinlich A Single Lonesome Soul sein, während alle Entwickler zum aktuellen Visual Data Flow Construction Kit Secret Funky Project abgezogen wurden, oder wie auch immer die aktuelle Sau heißt, die vom Management mal wieder durchs Dorf getrieben wird.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Jammer-Thread
Verwend doch std::for_each() ;)
-
- Establishment
- Beiträge: 489
- Registriert: 01.03.2009, 19:09
Re: Jammer-Thread
Wo wir grad beim Thema sind.
Anstatt sinnvolle Features zu entwickeln Produzieren sie Müll den kein Mensch braucht...
http://www.golem.de/1201/89181.html
Anstatt sinnvolle Features zu entwickeln Produzieren sie Müll den kein Mensch braucht...
http://www.golem.de/1201/89181.html
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Re: Jammer-Thread
Hab ich auch schon gesehen... Das ist so ziemlich das dümmste was ich dieses Jahr gelesen habe.
- dot
- Establishment
- Beiträge: 1745
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: Jammer-Thread
Also ich finds lustig :D
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Und wer braucht schon Variadic Templates? :P
(Das ist sogar exception-safe!)
(Wow, jetzt kann ich endlich fast alle std::vector mit einer leichtgewichtigeren Klasse ersetzen.)
Code: Alles auswählen
array.shift_back( new(array.allocate_back()) MyElementType(...) );
(Wow, jetzt kann ich endlich fast alle std::vector mit einer leichtgewichtigeren Klasse ersetzen.)
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Re: Jammer-Thread
Könntest du deine göttliche Eingebung noch etwas erläutern? ;)CodingCat hat geschrieben:Code: Alles auswählen
array.shift_back( new(array.allocate_back()) MyElementType(...) );
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Naja, da ist nix wildes dahinter: allocate_back() gibt einen void*-Zeiger auf das erste noch nicht konstruierte Element zurück (quasi &array[array.size()]), verändert jedoch nichts am array. Placement new konstruiert an der gegebenen Adresse ganz normal das Objekt. Fliegt keine Ausnahme, so geht der Zeiger auf das erfolgreich konstruierte Objekt zurück in shift_back(), wo er von einem assert() mit &array[array.size()] verglichen wird, bevor dort array.size() um 1 inkrementiert wird. Fliegt eine Ausnahme, so wird das Objekt dank Placement new entsprechend den Standardregeln automatisch zerstört, shift_back() wird nicht aufgerufen und array wurde rein logisch überhaupt nicht verändert.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
- CodingCat
- Establishment
- Beiträge: 1857
- Registriert: 02.03.2009, 21:25
- Wohnort: Student @ KIT
- Kontaktdaten:
Re: Jammer-Thread
Wahnsinn, ich habe den ganzen Tag damit verbracht, D3DX Effects 11 zu fixen. Irgendwann muss ich doch was eigenes schreiben. Heute morgen habe ich kurz darüber nachgedacht, CgFX zu integrieren, aber die sind noch nicht mal bei Compute Shaders angekommen.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Fällt sonst noch wem auf, dass Visual C++' Optimizer 64-Bit Left Shifts nicht vorhersagen kann?
Finde ich schade, weil ich jetzt 18 KiB Maschinentext in meiner Exe habe, die einen Hash vorberechnen sollten aber nichts anderes tun als
000000013F22D8F3 movzx ecx,byte ptr [13F24C6E7h]
000000013F22D8FA shl rcx,8
000000013F22D8FE add rcx,rax
000000013F22D901 movzx eax,byte ptr [13F24C6E5h]
000000013F22D908 shl rcx,8
000000013F22D90C add rcx,rax
000000013F22D90F movzx eax,byte ptr [13F24C6E4h]
000000013F22D916 shl rcx,8
000000013F22D91A add rcx,rax
000000013F22D91D movzx eax,byte ptr [13F24C6E3h]
000000013F22D924 shl rcx,8
000000013F22D928 add rcx,rax
000000013F22D92B movzx eax,byte ptr [13F24C6E2h]
000000013F22D932 shl rcx,8
000000013F22D936 add rcx,rax
000000013F22D939 movzx eax,byte ptr [13F24C6E1h]
000000013F22D940 shl rcx,8
000000013F22D944 add rcx,rax
Finde ich schade, weil ich jetzt 18 KiB Maschinentext in meiner Exe habe, die einen Hash vorberechnen sollten aber nichts anderes tun als
000000013F22D8F3 movzx ecx,byte ptr [13F24C6E7h]
000000013F22D8FA shl rcx,8
000000013F22D8FE add rcx,rax
000000013F22D901 movzx eax,byte ptr [13F24C6E5h]
000000013F22D908 shl rcx,8
000000013F22D90C add rcx,rax
000000013F22D90F movzx eax,byte ptr [13F24C6E4h]
000000013F22D916 shl rcx,8
000000013F22D91A add rcx,rax
000000013F22D91D movzx eax,byte ptr [13F24C6E3h]
000000013F22D924 shl rcx,8
000000013F22D928 add rcx,rax
000000013F22D92B movzx eax,byte ptr [13F24C6E2h]
000000013F22D932 shl rcx,8
000000013F22D936 add rcx,rax
000000013F22D939 movzx eax,byte ptr [13F24C6E1h]
000000013F22D940 shl rcx,8
000000013F22D944 add rcx,rax
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
1> Generating code
1>XXX.cpp(113): error C2268: '_CxxThrowException' is a compiler predefined library helper. Library helpers are not supported with /GL; compile object file 'XXX.obj' without /GL.
1>LINK : fatal error LNK1257: code generation failed
1>XXX.cpp(113): error C2268: '_CxxThrowException' is a compiler predefined library helper. Library helpers are not supported with /GL; compile object file 'XXX.obj' without /GL.
1>LINK : fatal error LNK1257: code generation failed
Re: Jammer-Thread
Heißt das im Klartext, man kann mit dem MSVC-Compiler nicht gleichzeitig Code mit Exceptions schreiben und externe Bibliotheken einbinden?Krishty hat geschrieben:1> Generating code
1>XXX.cpp(113): error C2268: '_CxxThrowException' is a compiler predefined library helper. Library helpers are not supported with /GL; compile object file 'XXX.obj' without /GL.
1>LINK : fatal error LNK1257: code generation failed
http://fedoraproject.org/ <-- freies Betriebssystem
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
http://launix.de <-- kompetente Firma
In allen Posts ist das imo und das afaik inbegriffen.
Re: Jammer-Thread
http://msdn.microsoft.com/en-us/library/ff795730.aspx hat geschrieben:This method is included in a compiler-only file that the compiler uses to process exceptions. Do not call the method directly from your code.
Was spricht gegen eine separate Kompilierungseinheit?
- Krishty
- Establishment
- Beiträge: 8316
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: Jammer-Thread
Dochdoch. Man kann sich nur nicht seine eigene Ausnahmebehandlung schreiben und sie dann interprozedural optimieren lassen.antisteo hat geschrieben:Heißt das im Klartext, man kann mit dem MSVC-Compiler nicht gleichzeitig Code mit Exceptions schreiben und externe Bibliotheken einbinden?
@eXile: Du hast recht; da spricht fast garnichts gegen – ich hatte irrtümlicherweise gemutmaßt, dass ich mich wieder mit der abartigen MSIL .netmodule or module compiled with /GL found-Warnung rumschlagen müsste, die ich von Mixturen mit und ohne LTCG kenne. Es funktioniert mit einem eigenen Modul; wenn auch leider ohne Inlining.
Ein Grund zum Stänkern bleibt aber: Dieser Fehler sieht mir zu synthetisch aus. Nachdem er auftritt, läuft die Optimierung nichtsdestotrotz genau so weiter wie immer und bricht erst zu dem Zeitpunkt ab, wo sonst die Exe ausgeschrieben wird. Ich vermute, dass das einfach aus politischen statt aus technischen Gründen reingezimmert wurde.
- Artificial Mind
- Establishment
- Beiträge: 802
- Registriert: 17.12.2007, 17:51
- Wohnort: Aachen
Re: Jammer-Thread
rekonstruierte Tiefenwerte einer 16-Bit pro Kanal Positions-Textur vom Deferred Shading.