[quote=esskar,23.02.2006, 10:08][quote=Strat,22.02.2006, 23:14]@esskar: bei beiden wird dereferenziert;[/quote]
ist das sicher so?
ich kenn das nur von C++
A *a = new A();
a->foo(); // 1
(*a).foo(); // 2
Punkt 2 ist echte dereferenzierung - da ist mehr zu tun als bei 1[/quote]
Wie kommst du denn darauf? Es macht in C++ natürlich keinen Unterschied, ob man mit *. oder -> dereferenziert. Letzteres ist nur syntaktischer Zucker.
Hier ein experimenteller Beweis. C++ Quellcode:
class Foo {
public:
void foo();
};
void arrow_syntax(Foo *foo) {
foo->foo();
}
void star_syntax(Foo *foo) {
(*foo).foo();
}
Kompilationskommando:
g++ -Wall -O3 -g0 -S deref.cc
Ein kurzer Blick auf die Assemblerausgabe zeigt sofort, dass die beiden Funktionen arrow_syntax und star_syntax in einen unkonditionalen Sprungbefehl auf denselben Code optimiert werden. Auch ohne eingeschaltete Optimierungen kommt für beide Funktionen derselbe Code heraus.
Wenn VC++ das anders handhabt, dann erkläre ich den Compiler für noch bekloppter als g++.
(edit: das Forum mag offensichtlich Assemblercode nur im Vorschaumodus, daher habe ich den wieder entfernt...)\n\n
<!--EDIT|murphy|1140717807-->
When C++ is your hammer, every problem looks like your thumb.