왜 열거 형 변수가 rvalue입니까? BLUE }

예:

typedef enum Color
{
    RED,
    GREEN,
    BLUE
} Color;

void func(unsigned int& num)
{
    num++;
}

int main()
{
    Color clr = RED;
    func(clr);
    return 0;
}

이것을 컴파일 할 때 다음과 같은 오류가 발생합니다.

<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);

         ^~~

내가 clr전달 하는 변수 ( ) func(unsigned int&)는 lvalue 라고 생각합니다 . 주소를 얻을 수 있고 clr다른 값을 할당 할 수 있습니다. 전달하려고 할 때 왜 rvalue로 변 func(unsigned int&)합니까?



답변

clr자체는 유형의 lvalue입니다 Color. 그러나 함수는를 허용하지 않습니다 Color. 그것은 (참조)를 받아들 unsigned int입니다. 따라서 인수는 (암시 적으로) 변환됩니다. 그리고 변환의 결과는 유형의 prvalue입니다 unsigned int.


답변

enum 타입 init과 할당은 enum 안에 있어야합니다. 따라서 enum 타입은 lvalue 일 수 없습니다. void func (unsigned int & num)이 함수는 인용 타입이 필요합니다