Khi kiểu enum đóng vai trò là một l-value (giá trị bên trái của phép gán), tình hình sẽ thay đổi. Gán một giá trị int cho nó (ví dụ như → weekday day = 0;) sẽ gây ra một cảnh báo khi biên dịch vì trình biên dịch nhận ra những phép gán này tiềm ẩn nguy cơ đối với việc toàn vẹn dữ liệu.
Bạn có thể phải sửa đổi phép gán theo cách sau:
1 |
weekday day = static_cast<weekday>(0); |
hoặc sử dụng một cách khác để ép kiểu:
1 |
weekday f = (weekday)0; |
Cả hai cách đều được chấp nhận trong bối cảnh này. Nhưng trong trường hợp này, bạn sẽ chịu hoàn toàn trách nhiệm về tính hợp lệ của dữ liệu.
Nói chung, các giá trị kiểu enum cũng là các giá trị int và có thể được sử dụng làm đối số trong bất kỳ thao tác nào chấp nhận kiểu int. Chúng được lưu trữ giống như kiểu int. Ví dụ: dòng sau
1 |
cout << SUNDAY << endl; |
sẽ in ra một dòng có chứa ‘0’, chứ không phải từ “SUNDAY”.
Có vẻ hơi bất tiện đúng ko ? Không sao. Chúng ta có thể thay đổi nó với sự giúp đỡ của môn võ công “nạp chồng toán tử” ở các bài sau.