为什么枚举变量在这里是右值?

问题描述 投票:6回答:2

示例:

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&)时为什么会变成右值?

c++ c++11 rvalue-reference rvalue lvalue
2个回答
8
投票

clr本身是类型为Color的左值。但是该功能不接受Color。它接受(引用)unsigned int。因此,该参数被转换(隐式)。转换的结果是unsigned int类型的prvalue。


0
投票

枚举类型的初始化和赋值必须在枚举内部,所以枚举类型不能为左值。void func(unsigned int&num)此函数需要引用类型

© www.soinside.com 2019 - 2024. All rights reserved.