Exemple:
typedef enum Color
{
RED,
GREEN,
BLUE
} Color;
void func(unsigned int& num)
{
num++;
}
int main()
{
Color clr = RED;
func(clr);
return 0;
}
J'obtiens l'erreur suivante lorsque je compile ceci:
<source>: In function 'int main()':
<source>:16:9: error: cannot bind non-const lvalue reference of type 'unsigned int&' to an rvalue of type 'unsigned int'
func(clr);
^~~
Je pense que la variable ( clr
) à laquelle je passe func(unsigned int&)
est une valeur l. Je peux obtenir l'adresse de clr
et lui attribuer une autre valeur. Pourquoi cela se transforme-t-il en valeur lorsque j'essaie de le transmettre func(unsigned int&)
?
enum
ununsigned int
?typedef enum
n'est pas un type natif, et C ++ le traiterait comme ununsigned int
type.clr
.enum type
commeunsigned int
en C ++.enum X
est son propre type, distinct deint
Réponses:
clr
lui-même est une valeur de typeColor
. Mais la fonction n'accepte pas aColor
. Il accepte un (référence à)unsigned int
. Ainsi, l'argument est converti (implicitement). Et le résultat de la conversion est une valeur de typeunsigned int
.la source
func(Color&)
avant de poser la question, et ça se passe bien. Je pensais juste que C ++ traiterait leenum
type comme ununsigned int
type lors de la compilation. Merci pour votre réponse.le type enum init et l'affectation doivent être enum à l'intérieur en donc le type enum ne peut pas être lvalue。 void func (unsigned int & num) cette fonction a besoin du type quote
la source
func(unsigned int&)
àfunc(Color&)
, le compilateur l'accepte. Je pense donc que la variable de type enum est une valeur l.func(Color&)
et ça passe.