char
là loại cơ bản. wchar_t
phát triển như đầu tiên một giải pháp thư viện (C), và sau đó trở thành một xây dựng trong loại với một loại tiềm ẩn, tương ứng với loại mà trước đó đã được sử dụng để typedef
nó:
C++ 11 $ 3.9.1/5
” Type wchar_t
shall have the same size, signedness, and alignment requirements (3.11) as one of the other integral types, called its underlying type.
Điều này giải thích tại sao bạn không thể thay đổi signedness của wchar_t
, nhưng nó không giải thích lý do tại sao có một loại char
với signedness không xác định.
Ngoài ra, lựa chọn hầu hết các trình biên dịch mặc định là không thực tế vì nhiều lý do. Một lý do là các giá trị âm là gây phiền nhiễu và thường phải được đúc thành unsigned để so sánh chúng. Một lý do khác là các hàm phân loại ký tự C yêu cầu các giá trị không âm (trừ khi được thông qua EOF
). Lý do thứ ba là trên máy cũ và dấu hiệu cũ hoặc máy bổ sung của một người có một giá trị không sử dụng được.
Có thể có một số giải thích về điều đó trong Stroustrup “ Thiết kế và tiến hóa của C++ ”, nhưng tôi nghi ngờ điều đó.
Nghe có vẻ như lịch sử cố định, một điều gì đó mà tại một thời điểm đã tạo ra một số ý thức, đối với công nghệ vào thời điểm đó.
Nguồn
2015-09-30 02:10:56
Điều này có vẻ không hợp pháp đối với tôi. Có phải C++? –
@ArlieStephens Vâng, hãy xóa thẻ C tốt hơn. C++ mà không cần bất kỳ tiêu đề nào. –
@ John3136 C++. Được xây dựng trong loại –