Cách thông thường để xác định một số nguyên liên tục sử dụng bên trong một hàm là:Có lý do nào để sử dụng enum để xác định một hằng số trong mã C++ không?
const int NumbeOfElements = 10;
cùng cho việc sử dụng trong một lớp:
class Class {
...
static const int NumberOfElements = 10;
};
Sau đó nó có thể được sử dụng như là một mảng kích thước cố định bị ràng buộc có nghĩa là nó được biết đến lúc biên dịch.
trình biên dịch trước dài không hỗ trợ cú pháp sau và đó là lý do tại sao sự đếm được sử dụng:
enum NumberOfElementsEnum { NumberOfElements = 10; }
Bây giờ với hầu hết các trình biên dịch sử dụng rộng rãi hỗ trợ cả trong chức năng const int
và trong lớp static const int
cú pháp là có bất kỳ lý do để sử dụng enum cho mục đích này?
Hmm, gcc không phàn nàn về điều này ngay cả với -pantic -Wall -Wextra. Tôi đoán vì nó không thể phát hiện lỗi cho đến khi liên kết thời gian anyway, nó chỉ cho lên trên cố gắng để chẩn đoán mã không di động của loại này. –
Câu trả lời hay. Một điều tốt đẹp khác mà bạn không đề cập một cách rõ ràng là một enum là một rvalue, và do đó không có kho lưu trữ nào được phân bổ cho nó. Nó có thể được tốt đẹp để biết rằng * chắc chắn *, thay vì dựa vào tối ưu hóa trình biên dịch nếu bạn đang làm mẫu lập trình meta và instantiating một số lượng lớn các mẫu lớp. – jalf
Nếu không có định nghĩa cho 'static const int' bên ngoài lớp, sẽ không có bất kỳ bộ nhớ nào được cấp phát cho nó. Ngoài ra, rvalues cũng có thể có lưu trữ được phân bổ cho họ (tạm thời là rvalues, ví dụ, và họ chắc chắn sử dụng lưu trữ). –