2011-10-13 29 views
10

Trong khi đủ điều kiện một giá trị liệt kê với tên của điều tra là không hợp lệ C++ 03, nó là hợp lệ C++ 11, từ những gì tôi hiểu. Mặc dù vậy, MSVC 10 tạo ra cảnh báo C4482 sau:Có an toàn khi tắt cảnh báo MSVC C4482 không?

enum E { A, B }; 

int i = E::A; // warning C4482 (but valid C++11?) 

Vì hầu hết mã của chúng tôi sử dụng C++ 11 tính năng (đặc biệt là lambdas), có vẻ như an toàn để vô hiệu hóa cảnh báo này. Tôi có phải là mã hợp lệ C++ 11 không?

Lưu ý: Tôi đã không viết mã được đề cập và tôi không muốn đi qua và thay đổi mọi lần xuất hiện của điều này.

Chỉnh sửa: Đã thêm một số liên kết có liên quan.

Trả lời

9

Vì phần lớn mã của chúng tôi sử dụng các tính năng C++ 11 (đặc biệt là lambdas), có vẻ như an toàn để tắt cảnh báo này.

Nếu bạn đã dựa vào các tính năng của C++ 11, thì có. C++ 11 cho phép bạn sử dụng các enums thông thường được scoped bởi tên của điều tra. Microsoft đã có điều này như là một phần mở rộng cho một thời gian, vì vậy họ đã ban hành một cảnh báo về hành vi phi tiêu chuẩn.

Vì vậy, bạn có thể tắt tính năng này.

+0

Cảm ơn. Đó là những gì tôi đã nghĩ. Tôi cần một ai đó để xác minh rằng tôi đã không bỏ lỡ điều gì đó. – jakar

Các vấn đề liên quan