CẬP NHẬT - câu trả lời này, mặc dù nó có vẻ có ý nghĩa đối với tôi và những người khác, nhưng hóa ra phần lớn là sai (và đủ sai về ý định, vì thực sự chỉ là sai hoàn toàn). Vì (như được chỉ ra trong một nhận xét của AProgrammer), không được phép sử dụng UCS bên ngoài các hằng chuỗi khi cùng một ký tự có thể được biểu diễn bình thường trong bộ ký tự cơ sở. Vì vậy, không sử dụng nó để thoát khỏi các từ khóa, như trong ví dụ của tôi; và không sử dụng nó để tạo 'định danh' như thế nào 23skiddo
bằng cách thoát khỏi2
. Tôi đoán nó vẫn có thể được sử dụng để làm cho tên tương thích với các ngôn ngữ bên ngoài, nhưng chỉ, dường như, khi những tên đó bắt đầu bằng một chữ cái hoặc ký tự mở rộng và chỉ chứa các chữ cái, chữ số, gạch chân và ký tự mở rộng - mà Có vẻ như quá hạn chế để hỗ trợ đúng ý định đó. Vì vậy, mục đích chính là (như trong câu trả lời của AProgrammer) là cho phép các ký tự phụ này trong mã định danh và để cho phép các trình soạn thảo nguồn trong đó các ký tự này được hiển thị bằng đồ họa, trong khi vẫn cho phép tệp nguồn ở dạng ASCII đơn giản.
Các chương trình C ++ có thể gọi các hàm được viết bằng các ngôn ngữ khác. Đó là một chiến lược tốt trong một phần của ủy ban tiêu chuẩn hóa để đảm bảo rằng C ++ sẽ tương thích với các ngôn ngữ khác có thể cho phép các ký tự không chữ và số trong các tên hàm, ngay cả khi các ngôn ngữ đó chưa tồn tại. Tiêu chuẩn không cần xác định cách thức hoạt động ở cấp liên kết, v.v; nhưng thật tốt khi có một cơ chế xác định để cho phép nó.
Bạn không cần nhìn vào tương lai để thấy được cách sử dụng này. Giả sử tôi có một thư viện C cũ có chức năng được gọi là catch
(hoặc được bảo vệ hoặc có thể thay đổi) ... và tôi muốn gọi nó từ C ++. Và vì bất kỳ lý do gì tôi không thể hoặc không muốn sửa đổi mã C (Nhân tiện, tôi đã hơn một lần phải xử lý mã C cũ sử dụng tên hàm đã trở thành từ khóa C ++ ...)
Với tên UC, tôi có thể viết cái này trong một tiêu đề, và sau đó chỉ cần gọi 'Catch_func ()':
extern "C" {
int catc\u0068( int a, int b ); // C 'catch()' function
}
inline int catch_func( int a, int b ) { return catc\u0068(a,b); }
Chắc chắn nó xấu, nhưng nó không thành vấn đề vì nó chỉ ở một nơi trong tiêu đề. Cách tiếp cận tương tự có thể được sử dụng để tạo ra các sơ khai để gọi các hàm trong các ngôn ngữ khác và hoạt động ngay cả khi tên là từ khóa C ++ hoặc unicode, hoặc có dấu cách .
hoặc dấu chấm câu khác được nhúng trong chúng
Nhiều ngôn ngữ khác có các thiết bị cho phép tạo các số nhận dạng không tuân theo mẫu chung; ví dụ trong Verilog, \abcd
là một mã định danh tương đương abcd
, nhưng \while
và \23skidoo
cũng \44.e2
là các mã định danh, cần có tiền tố dấu gạch chéo ngược để được nhìn thấy như vậy. Do cách thức sử dụng Verilog, điều quan trọng là cho phép mọi tên gọi, nơi chúng liên quan đến các giao diện bên ngoài.