2017-01-29 12 views
10

Tôi biết đây là một tính năng cũ nhưng đọc trên user defined literals ví dụ:Tại sao các tên không gạch dưới được dành riêng cho việc triển khai UDL và không phải là cách khác?

return_t operator "" _a(long); // Literal operator for user-defined INTEGRAL literal 

Tôi đã nhắc nhở rằng

gạch dưới hàng đầu là bắt buộc. (Chỉ có bộ thư viện chuẩn được phép xác định các chữ mà không có dấu gạch dưới.) (A)

Điều này dường như phá vỡ mô hình từ cho đến nay việc thực hiện hợp tác với các tên underscorey và lại cho chúng ta những cái tốt, ví dụ dành cho việc thực hiện là những cái tên

  1. Thành phần một dấu gạch dưới đôi
  2. Hãy bắt đầu với một dấu gạch dưới theo sau là một chữ cái viết hoa

Ngoài ra trích dẫn (A) là hơi nguy hiểm trong sự hiện diện của quy tắc (2). Vậy tại sao không nhất quán?

+3

Điều này là để chúng tôi có thể nhận được hậu tố tìm kiếm "tự nhiên" trong thư viện chuẩn và để lại hậu tố do người dùng xác định rõ ràng như vậy. –

Trả lời

9

Trước khi ý tưởng về chữ được người dùng xác định đã được thêm vào ngôn ngữ, tất cả các chuỗi tiêu chuẩn được sử dụng các chuỗi không bắt đầu bằng dấu gạch dưới, chẳng hạn như 123L cho số long int. Vì vậy, để duy trì tính nhất quán, các literals chuẩn nhận được không gian tên mà không có bất kỳ tiền tố đặc biệt nào và các UDL được phân biệt với chúng bằng cách sử dụng _.

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