Tôi đã xem xét một số tính năng mới của C++ 11 và rất ấn tượng với một số người trong số họ, đặc biệt là người dùng định nghĩa literals.Làm thế nào để có được biến nhỏ nhất với C++ 11 người dùng định nghĩa literals
Chúng cho phép bạn xác định các chữ cái theo dạng 999_something
trong đó something
kiểm soát những gì được thực hiện cho 999
để tạo chữ. Vì vậy, không cần phải sử dụng:
#define MEG * 1024 * 1024
int ten_meg = 10 M;
Tôi đã suy nghĩ điều này sẽ được tốt đẹp để thực hiện dấu gạch dưới với số lượng lớn, giống như 1_000_000_blah
mà sẽ phù hợp với khả năng đọc của Perl, mặc dù ý tưởng rằng Perl là bằng cách nào đó có thể đọc được có vẻ khá hài hước để tôi :-)
Nó cũng sẽ có ích cho các giá trị nhị phân như 1101_1110_b
và 0011_0011_1100_1111_b
.
Rõ ràng là vì các ký tự _
, những thứ này sẽ cần phải là kiểu chế độ thô, xử lý chuỗi C và tôi đồng ý với điều đó.
Điều tôi không thể tìm hiểu cách phân phối loại khác nhau dựa trên kích thước toán hạng. Ví dụ:
1101_1110_b
nên đưa ra một char
(giả sử char
là 8-bit dĩ nhiên) trong khi:
0011_0011_1100_1111_b
sẽ cung cấp một loại 16-bit.
Tôi có thể lấy chiều dài của toán hạng từ bên trong chức năng điều hành literal operator""
bản thân (bằng cách đếm ký tự chữ số) nhưng kiểu trả về dường như được cố định vào chức năng vì vậy tôi không thể trở về một loại khác nhau dựa trên này.
Điều này có thể được thực hiện với một hậu tố duy nhất _b
trong khung định nghĩa người dùng được xác định hay không.
Tôi không chắc chắn nếu điều này làm việc, nhưng bạn có thể cố gắng để quá tải một số mẫu nhà điều hành bằng chữ cho số bit khác nhau. – celtschk
Nó dường như không hoạt động: http://akrzemi1.wordpress.com/2012/10/29/user-defined-literals-part-iii/ - Tôi nghĩ rằng các mẫu được cho nên có khá dễ dàng để mở rộng để hỗ trợ nhiều loại. – celtschk
Suy nghĩ lại về nó, khả năng * không * công việc đang sử dụng dấu gạch dưới như một phần của số: IIUC '1101_1110_b' sẽ * không * gọi' toán tử "" _ b' với đối số (mẫu) '1101_1110', nhưng' toán tử " "_1110_b' với đối số (mẫu)' 1101'. – celtschk