为什么枚举变量在这里是右值?
Why is an enum variable an rvalue here?
示例:
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);
^~~
我认为我传递给 func(unsigned int&)
的变量 (clr
) 是一个左值。我可以获得 clr
的地址并可以为其分配另一个值。为什么当我尝试将它传递给 func(unsigned int&)
时它会变成右值?
clr
本身是Color
类型的左值。但是函数不接受 Color
。它接受(参考)unsigned int
。因此,参数被转换(隐式)。并且转换的结果是 unsigned int
类型的纯右值。
枚举类型的初始化和赋值必须是枚举里面的,所以枚举类型不能是左值。
void func(unsigned int& num) 这个函数需要引号类型
示例:
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);
^~~
我认为我传递给 func(unsigned int&)
的变量 (clr
) 是一个左值。我可以获得 clr
的地址并可以为其分配另一个值。为什么当我尝试将它传递给 func(unsigned int&)
时它会变成右值?
clr
本身是Color
类型的左值。但是函数不接受 Color
。它接受(参考)unsigned int
。因此,参数被转换(隐式)。并且转换的结果是 unsigned int
类型的纯右值。
枚举类型的初始化和赋值必须是枚举里面的,所以枚举类型不能是左值。 void func(unsigned int& num) 这个函数需要引号类型