Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.iso-c++ > #1997

Re: Move semantics und operator overloading

From ram@zedat.fu-berlin.de (Stefan Ram)
Newsgroups de.comp.lang.iso-c++
Subject Re: Move semantics und operator overloading
Date 2017-01-09 20:26 +0000
Organization Stefan Ram
Message-ID <RVO-20170109212221@ram.dialup.fu-berlin.de> (permalink)
References (2 earlier) <99988bba-1453-4e4a-bf29-a11886a5851e@googlegroups.com> <RVO-20170108145851@ram.dialup.fu-berlin.de> <30d04616-3615-44c7-a4aa-9f6a50d3b8af@googlegroups.com> <move-20170108232127@ram.dialup.fu-berlin.de> <8722e69a-16cc-4d7f-a3ee-baed2b66a56b@googlegroups.com>

Show all headers | View raw


Helmut Zeisel <zei2011@liwest.at> writes:
>a1 wird (nach dem std::cout) in die lokale Variable a kopiert, bei
>der Rückgabe wird jedenfalls nichts kopiert, sondern statt
>einer Kopie die RVO angewendet. 

  Deine ursprüngliche Frage war wohl, warum »Four«
  weniger move/copy-Operationen macht als »Two«.

  Hier eine etwas erweiterte und manuell 
  bearbeitete Ausgabe für den Fall »(a+b)+c«:

*************************** Testing 1AI4FourE
### Constructing a 0x60
### Constructing b 0x40
### Constructing c 0x20
(a+b)+c
const a& + const b&:             Aufruf 0
### Copying a 0x80
... 0
### Concatenating a + b 0x80
... 1
ab&& + const c&:                 Aufruf 1
### Concatenating ab + c 0x80
...
### Moving abc 0x00

*************************** Testing 1AI3TwoE
### Constructing a 0x40
### Constructing b 0x20
### Constructing c 0x00
(a+b)+c
### Copying a 0x80
a + const b&:                     Aufruf 0
### Concatenating a + b 0x80
### Moving ab 0x60
ab + const c&:                    Aufruf 1
### Concatenating ab + c 0x60
### Moving abc 0xe0

  Die Adresse ist der this-Zeiger des Objektes,
  das die Ausgabe erzeugt.

  In »(a+b)+c« ist »(a+b)« ein Temporär mit der 
  Adresse 80. (Die Adressen wurden nicht manuell
  hinzugefügt, sondern stammen vom Programm.)

  Bei »Four« wird für die lokale Variable »a« aus
  Aufruf 0 gleich dieser Temporär genommen (RVO)
  und Aufruf 1 referenziert diesen Temporär und
  schreibt noch ein »c« dahinter. Hier war kein
  copy/move notwendig.

  Bei »Two« wird für den Parameter »a« ebenfalls
  gleich der Temporär genommen. Doch kommt für 
  die Addition des »c« bei »Two« nur die Überladung
  mit dem Kopierparameter »a« in Frage. Dieser hat
  die Adresse 0x60 und da es ein Kopierparameter ist
  muß der Temporär 0x80 jetzt in die Adresse 0x60
  gebracht werden - und dieser Schritt war bei 
  »Four« nicht nötig, weil dort eine Überladung
  verwendet werden konnte, deren erster Parameter
  kein Kopierparameter ist.

Back to de.comp.lang.iso-c++ | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-06 23:53 -0800
  Re: Move semantics und operator overloading ram@zedat.fu-berlin.de (Stefan Ram) - 2017-01-07 15:38 +0000
  Re: Move semantics und operator overloading ram@zedat.fu-berlin.de (Stefan Ram) - 2017-01-07 16:36 +0000
    Re: Move semantics und operator overloading Helmut Zeisel <helmut.zeisel@gmail.com> - 2017-01-07 12:10 -0800
      Re: Move semantics und operator overloading ram@zedat.fu-berlin.de (Stefan Ram) - 2017-01-08 14:00 +0000
        Re: Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-08 07:27 -0800
          Re: Move semantics und operator overloading ram@zedat.fu-berlin.de (Stefan Ram) - 2017-01-08 22:26 +0000
            Re: Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-09 00:50 -0800
              Re: Move semantics und operator overloading ram@zedat.fu-berlin.de (Stefan Ram) - 2017-01-09 20:26 +0000
                Re: Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-09 22:59 -0800
                Re: Move semantics und operator overloading ram@zedat.fu-berlin.de (Stefan Ram) - 2017-01-10 17:32 +0000
                Re: Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-10 09:56 -0800
                Re: Move semantics und operator overloading ram@zedat.fu-berlin.de (Stefan Ram) - 2017-01-11 00:21 +0000
                Re: Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-10 23:41 -0800
                Re: Move semantics und operator overloading ram@zedat.fu-berlin.de (Stefan Ram) - 2017-01-11 10:04 +0000
                Re: Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-11 02:33 -0800
                Re: Move semantics und operator overloading Bonita Montero <Bonita.Montero@gmail.com> - 2017-01-11 15:43 +0100
                Re: Move semantics und operator overloading ram@zedat.fu-berlin.de (Stefan Ram) - 2017-01-11 22:27 +0000
                Re: Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-11 22:22 -0800
                Re: Move semantics und operator overloading ram@zedat.fu-berlin.de (Stefan Ram) - 2017-01-12 18:15 +0000
                Re: Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-12 12:34 -0800
                Re: Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-13 03:30 -0800
                Re: Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-11 23:53 -0800
                Re: Move semantics und operator overloading ram@zedat.fu-berlin.de (Stefan Ram) - 2017-01-12 20:23 +0000
                Re: Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-13 00:47 -0800
                Re: Move semantics und operator overloading Helmut Zeisel <zei2011@liwest.at> - 2017-01-11 00:15 -0800

csiph-web