Chữ được xác định bởi người dùng phải bắt đầu bằng dấu gạch dưới.
Đây là một quy tắc phổ biến ít nhiều phổ biến mà bạn có thể tìm thấy trên mọi trang web có từ ngữ giáo dân nói về nghĩa đen của người dùng. Đó cũng là một quy tắc mà tôi (và có thể là những người khác?) Đã ngang nhiên bỏ qua kể từ khi có căn cứ "thật là nhảm nhí". Tất nhiên, điều đó hoàn toàn không đúng. Theo nghĩa chặt chẽ nhất, điều này sử dụng một định danh dành riêng, và do đó gọi ra Hành vi không xác định (mặc dù thực tế bạn không nhận được nhiều như một nhún vai từ trình biên dịch).
Vì vậy, suy nghĩ xem tôi có nên tiếp tục cố tình bỏ qua phần đó (theo ý kiến của tôi là vô dụng) của tiêu chuẩn hay không, tôi quyết định xem xét những gì thực sự được viết. Bởi vì, bạn biết đấy, nó quan trọng những gì mọi người biết . Điều quan trọng là những gì được viết trong tiêu chuẩn.
[over.literal]
nói rằng "một số" định danh hậu tố theo nghĩa đen được bảo lưu, liên kết đến [usrlit.suffix]
. Cái sau nói rằng tất cả đều được bảo lưu, ngoại trừ những cái bắt đầu bằng dấu gạch dưới. OK, vì vậy đó chính xác là những gì chúng ta đã biết, được viết rõ ràng (hay đúng hơn là viết ngược).
Ngoài ra, [over.literal]
có chứa một ghi chú gợi ý cho một điều rõ ràng nhưng rắc rối:
ngoại trừ các ràng buộc được mô tả ở trên, chúng là các hàm phạm vi không gian tên thông thường và các mẫu hàm
Chà, chắc chắn là như vậy. Không nơi nào nói rằng họ không, vì vậy bạn sẽ mong đợi điều gì khác.
Nhưng đợi một lát. [lex.name]
tuyên bố rõ ràng rằng mỗi định danh bắt đầu bằng dấu gạch dưới trong không gian tên toàn cục được bảo lưu.
Bây giờ, một toán tử theo nghĩa đen thường, trừ khi bạn rõ ràng đặt nó vào một không gian tên (mà tôi tin là không có ai!?) Rất nhiều trong không gian tên toàn cầu. Vì vậy, tên, phải bắt đầu bằng dấu gạch dưới, được bảo lưu. Không có đề cập đến một ngoại lệ đặc biệt. Vì vậy, mỗi tên (có dấu gạch dưới hoặc không có) là một tên dành riêng.
Bạn có thực sự mong đợi đặt chữ theo định nghĩa của người dùng vào một không gian tên vì cách sử dụng "bình thường" (gạch dưới hay không) đang sử dụng tên dành riêng?
_km
(cho km) nó trong không gian tên udl
. Sau đó, một nghĩa đen cho 5km trông như ... 5udl::_km
?
using
tuyên bố dành cho. Trong phạm vi mà bạn cần sử dụng bằng chữ, có một câu lệnh sử dụng nhập nó.