예:
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)이 함수는 인용 타입이 필요합니다