int i = 10 vs int i(10)
-
int i = 10;ist äquivalent zuint i(10);. Selbst wenn int eine Klasse oä wäre, würde hier _nicht_ der Zuweisungsoperator benutzt. Ersteres wäre vielmehr eine implizite Umwandlung. Bei Interesse sei hier auch auf das Schlüsselwort explicit hingewiesen, um solche impliziten Umwandlungen zu unterbinden.
-
Chewbaka schrieb:
ganz einfach schrieb:
So ein Schwachsinn. Seit wann ist int den ein Objekt mit Konstruktor?
Seit C++
Sonnst würde die Initialisierung mit Klammern (quasi über den Konstruktor) überhaupt nicht gehen.Nein, int ist keine Klasse und hat auch keinen Konstruktor. int ist ein POD-Typ. Das man int (und die anderen builtin-Typen) dennoch so initialisieren kann, wie mit einem Konstruktor, ist eine extra hinzugefügte Ausnahme, damit man besser generisch programmieren kann.
-
der Master hat gesprochen

danke
-
Yep! Der Assemblercode ist ebenfalls identisch.
Nochmals zum Schlüsselwort explicit:
http://www.henkessoft.de/C++/Cpp_school/explicit.html
-
..
-
Erhard Henkes schrieb:
Bjarne Stroustrup
Interessantes Mitglied.
http://www.henkessoft.de/C++/Cpp_school/stroustrup.jpgDas wär ja mal richtig geil, wenn der hier aufkreuzen würde.. xD
btw:
Warum hast du ein Bild von Bjarne auf deiner Homepage? (Ok, ich gebs zu, i hab eins unter dem Kopfkissen. :p )
-
nochmals meine frage
wie wandelt man C++ in assembler code um?
-
wie wandelt man C++ in assembler code um?
Das ist eine wesentliche Aufgabe des Compilers/Linkers aus den h/cpp/lib-Dateien ausführbaren Maschinencode zu erzeugen. Mittels Disassemblierung erhält man dann Assemblercode. VC++ und gcc kann dies zum Beispiel.
Beispiel:
http://archives.free.net.ph/message/20080704.095504.784c20e1.de.html#gcc-helpIn VC++ kannst Du dies mit Alt+F7 einstellen:
C/C++ Ausgabedateien -> Assemblyausgabe:
Assembly, Computercode und Quelle (/FAcs)
-
wie mache ich das mit Vs 2008
-
..
-
..
-
folgender code wird in den unteren asm code umgewandelt
anscheinend ist immer erst der C++ ausdruck und dann umgewandelt in assembler
warum ist int i = 10; nicht in assembler umgewandelt?#include <iostream> int main() { int i = 10; std::cout << i << std::endl; system("PAUSE"); return 0; }#include <iostream> int main() { int i = 10; std::cout << i << std::endl; 00401000 mov eax,dword ptr [__imp_std::endl (402040h)] 00401005 mov ecx,dword ptr [__imp_std::cout (402044h)] 0040100B push eax 0040100C push 0Ah 0040100E call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (40203Ch)] 00401014 mov ecx,eax 00401016 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (402038h)] system("PAUSE"); 0040101C push offset string "PAUSE" (402114h) 00401021 call dword ptr [__imp__system (4020B4h)] 00401027 add esp,4 return 0; 0040102A xor eax,eax } 0040102C ret
-
(Die Disassembly kann nicht im Ausführmodus angezeigt werden.)
kommt bei mir wenn ich auf debugging starten gehe und dann das anzeigen lasse
( das oben war mit einzelschritten)
-
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=2318&lngWId=3
http://www.it-academy.cc/article/889/InlineAssembler(x86)+in+C+C++.html
-
initialisierung schrieb:
warum ist int i = 10; nicht in assembler umgewandelt?
weil es wegoptimiert wurde:
0040100C push 0Ahda ist noch halb sichtbar
-
Shade Of Mine schrieb:
initialisierung schrieb:
warum ist int i = 10; nicht in assembler umgewandelt?
weil es wegoptimiert wurde:
Sogar der Defaultkonstruktor
:pWenn du ne Funktion schreibst in der etwas mehr mit i gerechnet wird, dann wird das int i = 10 wahrscheinlich zu mov eax 10 oder ein anderes Register. Vielleicht findet ja dann einer den Defaultkonstruktoraufruf für das Register.

-
..
-
Bjarne Stroustrup schrieb:
Chewbaka schrieb:
Naja,soviel ich weiss entspricht
int i = 10; //Dem hier: int i; // mit defaultkonstruktor i.operator=(10); // zuweisungsoperator (und zwar ein automatisch generierter)Von daher ist es schon etwas langsamer als
int i(10); // konstruktor mit initialisierung /* i(int val) : i(val) {} */Oder so ähnlich wirds wohl ausschauen intern.
Thats undoubtly correct, but modern compilers optimize this assignment straight away! Therefore it doesn't matter in practise too much.
Hi Börni !