2015-09-15 15 views
6

Điều gì đảm bảo C++ thực hiện về thứ tự của các ký tự chữ? Có một thứ tự xác định các ký tự trong bộ ký tự nguồn cơ bản không? (Ví dụ như là 'a' < 'z' đảm bảo là đúng? Làm thế nào về 'A' < 'z'?)C++ đảm bảo gì về thứ tự của các ký tự chữ?

+0

Việc triển khai thực sự xấu xa có thể có ''z' == 'a' + 25' và _still_ có' 'b' <'a''. Tôi tin rằng điều này là khá underspecified, thậm chí chiếm EBCDIC và tin nhắn SMS. – MSalters

+1

Thực tế là không có chương trình bảo đảm nào nữa là đôi khi bạn nên gắn bó hỗ trợ của mình với một số triển khai, có thể là "nhiều nhất". Một ví dụ tốt trong quan điểm của tôi là Qt gắn bó với các triển khai có 'sizeof (int) == 4' ... Tất cả các trình biên dịch mà họ muốn hỗ trợ đảm bảo điều này, nhưng tất nhiên không phải tất cả, nhưng nếu bạn giới hạn bản thân để thực hiện như vậy, nó có thể làm cho cuộc sống dễ dàng hơn nhiều. Tuy nhiên, bạn cần phải cẩn thận và biết việc triển khai bạn đang gắn bó, cũng như xem xét giới hạn như vậy phụ thuộc vào ứng dụng, tất nhiên. – leemes

Trả lời

10

Các tiêu chuẩn chỉ cung cấp một đảm bảo cho Trật tự của các chữ số thập phân 0-9, từ dự thảo C++ 11 phần chuẩn 2.3[lex.charset]:

trong cả hai nguồn và thực hiện các bộ ký tự cơ bản, giá trị của mỗi nhân vật sau 0 trong danh sách trên các chữ số thập phân sẽ một lớn hơn giá trị của trước.

và nếu không nói (nhấn mạnh tôi):

Các cơ bản bộ ký tự thực hiện và cơ bản thực hiện rộng bộ ký tự mỗi sẽ chứa tất cả các thành viên của bộ ký tự nguồn cơ bản, cộng với các ký tự điều khiển đại diện cho cảnh báo, backspace, và vận chuyển trở lại, cộng với một ký tự null (tương ứng, null ký tự rộng), có đại diện có tất cả các bit bằng không. Đối với mỗi bộ ký tự thực thi cơ bản , giá trị của các thành viên phải là không âm và khác biệt với nhau.

Lưu ý, EBCDIC có bộ ký tự không liên tiếp.

Các vấn đề liên quan