Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7725[/thread]

argument an &{$id} (Seite 2)



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
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.
Crian
 2006-02-24 12:34
#63170 #63170
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
So hab ich das auch im Kopf, das wird in beiden Sprachen zum gleichen Code.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2006-02-21 20:40.