Thread argument an &{$id} (11 answers)
Opened by Froschpopo at 2006-02-21 20:40

murphy
 2006-02-23 19:58
#63169 #63169
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[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++
Code: (dl )
1
2
3
4
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:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
class Foo {
public:
 void foo();
};

void arrow_syntax(Foo *foo) {
 foo->foo();
}

void star_syntax(Foo *foo) {
 (*foo).foo();
}


Kompilationskommando:
Code: (dl )
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.

View full thread argument an &{$id}