Thí dụ:
typedef enum Color
{
RED,
GREEN,
BLUE
} Color;
void func(unsigned int& num)
{
num++;
}
int main()
{
Color clr = RED;
func(clr);
return 0;
}
Tôi nhận được lỗi sau khi tôi biên dịch này:
<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);
^~~
Tôi nghĩ rằng biến ( clr
) tôi chuyển đến func(unsigned int&)
là một giá trị. Tôi có thể lấy địa chỉ clr
và có thể gán giá trị khác cho nó. Tại sao nó biến thành một giá trị khi tôi cố gắng vượt qua nó func(unsigned int&)
?
@ NathanOliver-ReinstateMonica Theo quan điểm ban đầu của tôi, tôi nghĩ
—
Koen
typedef enum
không phải là một loại bản địa và C ++ sẽ coi nó như một unsigned int
loại thực sự.
Thông báo lỗi của GCC là tối ưu trong trường hợp này. Clang sẽ đưa ra một thông điệp ít gây nhầm lẫn bằng cách in loại ban đầu
—
cpplearner
clr
.
@cpplearner vâng, đó là lý do tại sao tôi nghĩ
—
Koen
enum type
là đối xử như unsigned int
trong C ++.
enum X
là loại riêng của nó, khác vớiint
enum
aunsigned int
?