The proposal itself giải thích tại sao: để cho phép quá tải với các loại cơ bản của uint_least16_t
và uint_least32_t
. Nếu họ là typedef
, điều này sẽ không thể thực hiện được.
Xác định char16_t
là một loại mới riêng biệt, có cùng kích thước và đại diện như uint_least16_t
. Tương tự, hãy xác định char32_t
là một loại mới riêng biệt, có cùng kích thước và biểu diễn như uint_least32_t
.
[N1040 định nghĩa char16_t
và char32_t
như typedefs để uint_least16_t
và uint_least32_t
, mà làm cho quá tải bằng các ký tự không thể.]
Đối với lý do tại sao họ không phải là trong không gian tên std
, đây là để tương thích với các đề xuất C ban đầu. C++ cấm các định nghĩa C xuất hiện trong phiên bản riêng của mình <cuchar>
[c.strings]/3
Các tiêu đề sẽ không xác định các loại char16_t
, char32_t
, và wchar_t
(2.11).
Các loại sau đó sẽ cần phải được typedefs toàn cầu, có thể mang theo thiết lập riêng của mình về các vấn đề như
typedef decltype(u'q') char16_t;
namespace foo {
typedef int char16_t;
}
Lý do cho std::nullptr_t
không phải là một từ khóa có thể được tìm thấy trong các câu hỏi mà bạn liên kết
Chúng tôi không hy vọng sẽ thấy nhiều việc sử dụng trực tiếp nullptr_t
trong các chương trình thực.
làm nullptr_t
ngoại lệ thực sự tại đây.
Đó là mới với tôi đây không phải là typedefs nữa. Bạn đã nhận được yêu cầu đó từ đâu? –
@ πάνταῥεῖ Chúng được liệt kê dưới dạng từ khóa trong tiêu chuẩn. – Brian
@ πάνταῥεῖ: C++ 11 cho biết chúng là từ khóa. (§2.12) – cHao