Sau khi đọc một số nhận xét cho câu hỏi này, tôi đã xem xét tiêu chuẩn C++ 11 (bản nháp không chính thức N3337).
Khi tôi nói "Tôi hiểu tại sao cảnh báo này được tạo" Tôi đã nhầm lẫn. Tôi giả định rằng dấu gạch dưới không được yêu cầu về mặt kỹ thuật theo tiêu chuẩn, nhưng chỉ là một đề xuất (do đó cảnh báo chứ không phải là lỗi).
Nhưng khi Nicol Bolas đã lớn lên, tiêu chuẩn sử dụng ngôn ngữ sau khi nói về người sử dụng định nghĩa chữ: "định suffix Literal mà không bắt đầu với một dấu gạch dưới được dành riêng cho tiêu chuẩn tương lai"
"Một chương trình có chứa hậu tố ud đó không đúng định dạng, không yêu cầu chẩn đoán".
Điều này tương tự như ngôn ngữ được sử dụng cho số nhận dạng dành riêng và "đại diện thay thế" chẳng hạn như "và", "hoặc", "không". Tôi nghĩ rằng điều này làm cho nó khá rõ ràng rằng điều này không thực sự là một cảnh báo ở nơi đầu tiên, nhưng một lỗi.
Đây có thể không phải là câu trả lời trực tiếp cho câu hỏi "có thể vô hiệu hóa" hay không, nhưng đó là câu trả lời đủ cho tôi.
Nicol nếu bạn muốn gửi nhận xét của mình làm câu trả lời, tôi sẽ thay đổi nhận xét của bạn thành câu trả lời được đánh dấu (tôi nghĩ điều đó là có thể).
Ồ, tôi không biết rằng C++ 11 hỗ trợ quá tải [toán tử "" "(http://ideone.com/ZDyCML). By the way g ++ hiện tại trong ideone ít nhất là không cảnh báo, nhưng trình biên dịch địa phương của tôi không. Chỉ cần cho thông tin của người khác (những người không biết bối cảnh), bằng cách thay đổi 'test' thành' _test' cảnh báo biến mất. – iammilind
Tại sao bạn muốn? Có khả năng là sau này các phiên bản C++ sẽ bao gồm các ký hiệu có khả năng xung đột. Thật tồi tệ*. Vấn đề của GCC là nó không mang lại cho bạn một lỗi * * theo cách của nó. –
@Nicol, đánh giá cao nhận xét của bạn và cảnh báo này thực sự dẫn đến lỗi cho tôi vì tôi sử dụng -Werror. Chúng tôi có nhiều cảnh báo có giá trị trong GCC nhưng chúng tôi vẫn để người lập trình tắt chúng một cách rõ ràng. – cmeub