Problem mit Call by Reference
-
SideWinder schrieb:
BTW: Steckt swap nicht in der algorithm?
bei mir in der utility
-
SideWinder schrieb:
Ist das eigentlich performanter?
idR nicht.
mag ausnahmen geben, aber auf gängigen pcs mit gängigen compiler ist das idR langsamer.optimal geht es per xchg - aber das sind so minimale sachen, wobei man ja auch bedenken muss, wo die variablen gerade sind, so dass ein mov reicht oder so...
man sollte nicht versuchen cleverer als der compiler zu sein.
oder gibts für int ne Spezialisierung?
Ne, aber ne überladung vielleicht.
Ansonsten muss man aber trotzdem nicht den template param angeben, weil es gott sei dank eine type deduction gibt, die feststellt, dass bei
swap(int, int)
wohl nur
swap<int>() gemeint sein kannwobei swap<int>(a,b) uU eine andere funktion als swap(a,b) (für typeof(a)==typeof(b)==int) ist.
-
ich hatte nicht den eindruck, es ginge hier im STL sondern, sondern um das wesen von call bei reference; irgendeine funktion muss man da ja wohl benutzen.
Shade Of Mine schrieb:
SideWinder schrieb:
Ist das eigentlich performanter?
idR nicht.
mag ausnahmen geben, aber auf gängigen pcs mit gängigen compiler ist das idR langsamer.optimal geht es per xchg - aber das sind so minimale sachen, wobei man ja auch bedenken muss, wo die variablen gerade sind, so dass ein mov reicht oder so...
das ist mit vorsicht zu geniessen. ich hatte nicht behauptet, dass es mit ^= etc. schneller wäre, denn im allgemeinen ist es das tatsächlich nicht. es bleibt trotzdem allemal eine interessante alternative, und es schadet wohl nicht, so etwas schon mal gesehen zu haben. der vorteil ist, dass diese variante keine temporäre variable braucht, was dem register allokator hilft, schliesslich leidet insbesondere die x86 architektur unter chronischem registermangel.
2. xchg ist auch so ein biest. in den fällen, in denen ^= schneller wäre, ist es die beste variante, nur gibt es eben kein c++ konstrukt dafür (ausser eben möglicherweise std::swap), aber sobald speicheroperanden im spiel sind, ist es das bei weitem langsamste.man sollte nicht versuchen cleverer als der compiler zu sein.
ich kann mir nicht vorstellen, dass du meinst, was du da sagst.
compiler sind grundsätzlich dumm. sie tun genau das, was man ihnen sagt.
-
compiler sind grundsätzlich dumm.
Kommt darauf an wie du "dumm" spezifizierst. Selbst mit Inline-Assembler wirst du Standard-Cdoe meistens nur halb so gut wie dein Compiler optimieren können.
MfG SideWinder
-
SideWinder schrieb:
Selbst mit Inline-Assembler wirst du Standard-Cdoe meistens nur halb so gut wie dein Compiler optimieren können.
Kommt darauf an, was du mit "Standard-Cdoe" meinst. Bei einer hinreichend komplexen Funktion schlag ich noch jeden Compiler.