C ++ références lvalue et références rvalue

Ce qui suit est une compilation de montage x86

Écrivez une phrase simple, pour voir la compilation

int i = 1;
int & ii = i;
0x080483f3  movl   $0x1,-0x10(%ebp)
0x080483fa  lea    -0x10(%ebp),%eax
0x080483fd  mov    %eax,-0x8(%ebp)

La première est affectée à i 1, i de la seconde phrase dans l'adresse dans eax, eax troisième phrase de la valeur passée de ii. Visible référence est rendue variable à partir d'une adresse à une variable, puis affectée à la variable de référence.

Regardez une compilation des références rvalue

int && iii = 10;
0x08048400  mov    $0xa,%eax
0x08048405  mov    %eax,-0xc(%ebp)
0x08048408  lea    -0xc(%ebp),%eax
0x0804840b  mov    %eax,-0x4(%ebp)

Le premier est attribué à 10 eax, eax placé dans la deuxième phrase -0xc (% ebp) au niveau dudit avant « variables temporaires associées à une valeur de référence vers la droite, la droite à une valeur particulière est stockée dans l'emplacement » dans ce programme, -0xc (% ebp) est l'adresse de la variable temporaire, par les deux eax à l'adresse mémorisée à iii.

Par le code ci-dessus, nous avons également constaté que, dans le pour stocker la valeur de référence du droit iii, -0x8 (% ebp) pour stocker la valeur de référence de la gauche, -0xc (% ebp) le stockage 10 procédure -0x4 (% ebp) décrit ci-dessus, et -0x10 (% ebp) a gardé le 1, la valeur de référence gauche et à droite la valeur de référence, comme int est de quatre octets (parce que toutes les adresses)

En même temps, nous pouvons comprendre en profondeur dans des variables temporaires dans ce programme, avec le nom de 1 (appelé i) et aucune valeur de nom 10 (variables temporaires) est en fait manipulé par la même manière, c'est-à-dire une variable temporaire fondamentale il n'est pas sur un nom de variable uniquement. Son cycle de vie et le cadre de pile fonction est la même. On peut dire variable temporaire et sa référence ont le même cycle de vie.

 

Résumé:

1, à gauche et à droite essence cité pas différents, prennent l' adresse! (Valeur de référence gauche a son propre espace mémoire)

2, la gauche est de prendre la valeur d'une adresse variable existante, vous devez créer la valeur à droite et prendre l' adresse de stockage temporaire. (Référence rvalue a son propre espace mémoire)

Publié 343 articles originaux · louange gagné 57 · Vues 200000 +

Je suppose que tu aimes

Origine blog.csdn.net/jadeshu/article/details/103542579
conseillé
Classement