Приклад:
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&)
?
@ NathanOliver-ReinstateMonica На мою оригінальну думку, я думаю, що
—
Коен
typedef enum
це не рідний тип, і C ++ насправді трактував би це як unsigned int
тип.
Повідомлення про помилку GCC у цьому випадку є неоптимальним. Кланг видасть менш заплутане повідомлення, надрукувавши оригінальний тип
—
cpplearner
clr
.
@cpplearner так, тому я вважав, що
—
Коен
enum type
це стосується як unsigned int
у C ++.
enum X
це власний тип, відмітний відint
enum
aunsigned int
?