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ỉ clrvà 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 enumkhông phải là một loại bản địa và C ++ sẽ coi nó như một unsigned intloạ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 typelà đối xử như unsigned inttrong C ++.
enum Xlà loại riêng của nó, khác vớiint
enumaunsigned int?