Une conversion implicite de la séquence d'une expression e
type T
est défini comme étant l'équivalent de la déclaration suivante, à l'aide de t
comme le résultat de la conversion (modulo la valeur de la catégorie, qui sera définie en fonction du T
), 4p3 et 4p6
T t = e;
L'effet de la conversion implicite est la même que l'exécution de la déclaration et l'initialisation, puis en utilisant la variable temporaire comme le résultat de la conversion.
À l'alinéa 4, de la conversion d'une expression d'un type donne toujours des expressions avec une propriété spécifique. Par exemple, la conversion de 0
de int*
donne une valeur de pointeur null, et pas seulement d'un arbitraire de la valeur du pointeur. La valeur de la catégorie de trop est une propriété spécifique de l'expression, et son résultat est défini comme suit
Le résultat est une lvalue si T est une lvalue type de référence ou référence rvalue pour la fonction type (8.3.2), un xvalue si T est une rvalue reference type d'objet, et un prvalue autrement.
Donc, nous savons que, en int t = e;
, le résultat de la conversion de la séquence est un prvalue, car int
est un non-type de référence. Donc, si nous fournir un glvalue, nous sommes dans le besoin évident d'une conversion. 3.10p2 précise en outre que, pour ne laisser aucun doute
Chaque fois qu'un glvalue apparaît dans un contexte où une prvalue est prévu, la glvalue est converti en prvalue; voir 4.1, 4.2 et 4.3.