web-dev-qa-db-ja.com

ここで列挙型変数が右辺値になるのはなぜですか?

例:

_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&)に渡そうとすると、なぜ右辺値に変わるのですか?

12
Koen

列挙型initおよび代入は内部で列挙型でなければならないため、列挙型はlvalueにはできません。void func(unsigned int&num)この関数は引用型が必要です

0
superman