示例:
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&)
)是一个左值。我可以获取clr
的地址,并可以为其分配另一个值。当我尝试将其传递给func(unsigned int&)
时为什么会变成右值?
clr
本身是类型为Color
的左值。但是该功能不接受Color
。它接受(引用)unsigned int
。因此,该参数被转换(隐式)。转换的结果是unsigned int
类型的prvalue。
枚举类型的初始化和赋值必须在枚举内部,所以枚举类型不能为左值。void func(unsigned int&num)此函数需要引用类型