Sont des chaînes de caractères littérales et les valeurs de retour de fonction lvalues ou rvalues?
-
Me demande juste si une chaîne littérale est une lvalue ou une rvalue. D'autres littéraux (comme int, float, char, etc) lvalue ou rvalue?
-
Est la valeur de retour d'une fonction d'une lvalue ou rvalue?
Comment voulez-vous faire la différence?
- Je ne suis pas sûr de ce que vous voulez dire avec "lvalue" et "rvalue". Voulez-vous dire que cette valeur peut se tenir sur le côté gauche ou droit de l'exploitant? Si oui, vous devriez spécifiques à votre question, parce que vous pouvez écrire à tous les non const variables. valeur de retour de la fonction est constante.
- lvalue et rvalue sont des termes communs avec des significations spécifiques.
- lvalue et rvalue sont compilateur et de la langue de la spécification du niveau de la parole. Dans ce cas, ils se réfèrent à la syntaxe de C.
- Un bon article est ici eli.thegreenplace.net/2011/12/15/...
Vous devez vous connecter pour publier un commentaire.
Le C standard reconnaît l'origine tenait à l' gauche et droit comme dans
L = R
; cependant, il dit de penser à des lvalue comme localisateur de valeur, qui a grosso modo signifie que vous pouvez obtenir l'adresse d'un objet et, par conséquent, cet objet a un endroit. (Voir 6.3.2.1 dans C99.)Par la même occasion, le standard a abandonné le terme rvalue, et utilise simplement "la valeur d'une expression", ce qui est pratiquement tout, y compris les littéraux tels que les entiers, les chars, les chars, etc. En outre, tout ce que vous pouvez faire avec une rvalue peut être fait avec une lvalue trop, de sorte que vous pouvez penser de tous les lvalues comme rvalues.
op&
en C peut être appliquée à certaines rvalues - ceux qui désignent des fonctions.int *p = &(int){ 42 }; printf("%d", *p);
.(int)(42)
qui est le même que(int)42
qui est juste redondant fonte, et en effet une rvalue.Il y a deux sortes d'expressions en C:
1. lvalue: Une expression qui est une lvalue peuvent apparaître comme de la gauche ou de droite d'une affectation.
2. rvalue: Une expression qui est une rvalue peut apparaître sur la droite mais pas à gauche d'une affectation.
Les Variables sont lvalues et peuvent donc apparaître sur le côté gauche d'une affectation. Les littéraux numériques sont rvalues et ne peuvent donc pas être attribué et ne peut apparaître sur le côté gauche. Suivant déclaration est valable:
int g = 20;
Mais la suite n'est pas une instruction valide et permettrait de générer des erreur de compilation:
10=20;
il y a un définition pour C++ de Microsoft. Par cette définition,
une chaîne littérale, dire "bonjour le monde", est une lvalue, parce que c'est const et non pas temporaire. En fait, il persiste à travers votre application durée de vie.