2015-05-27 27 views
5

Từ C++ 11 tiêu chuẩn (dự thảo n3337) §5/9:Xếp hạng có ý nghĩa gì liên quan đến chuyển đổi loại?

- Nếu cả hai toán hạng có cùng loại, không có chuyển đổi nữa là cần thiết.

- Ngược lại, nếu cả hai toán hạng đã ký các kiểu nguyên hoặc cả hai đều có loại unsigned integer, các toán hạng với kiểu số nguyên ít chuyển đổi rank sẽ được chuyển đổi sang kiểu của toán hạng với hơn rank .

- Ngược lại, nếu các toán hạng có kiểu dữ liệu integer unsigned có rank lớn hơn hoặc bằng với rank của loại toán hạng khác, các toán hạng với kiểu số nguyên ký sẽ được chuyển đổi sang các loại của toán hạng có loại số nguyên không dấu.

- Ngược lại, nếu kiểu của toán hạng với kiểu số nguyên ký thể đại diện cho tất cả các giá trị của các loại toán hạng với unsigned loại số nguyên, các toán hạng với kiểu dữ liệu integer unsigned sẽ chuyển đổi sang các loại toán hạng với kiểu số nguyên đã ký.

- Nếu không, cả hai toán hạng phải được chuyển thành số nguyên không dấu tương ứng với loại toán hạng với số nguyên đã ký.

Thứ hạng có ý nghĩa gì trong ngữ cảnh này?
Chắc chắn nó không đề cập đến std::rank,
như đã làm với số lượng kích thước trong một mảng ...

Xét về loại tách rời và các loại dấu chấm động, tôi nghĩ rằng nó đề cập đến kích thước tiềm năng của mình .

Các đảm bảo tiêu chuẩn C++ rằng:

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long) 

tôi phải đảm nhận sau đó rằng hàng ngũ này sau đó được:

RankType
1char
2short
3int
4long
5long long
...

Tôi chưa thể tìm thấy số list ở bất kỳ đâu mô tả cấp bậc xếp hạng cho từng loại.

+0

Xem 4.13/p1 ([conv.rank]). – 0x499602D2

+0

@ 0x499602D2 Yup, đó là những gì tôi đang tìm kiếm. –

Trả lời

6

Các 4.13 section nói rằng

Mỗi kiểu dữ liệu integer có rank chuyển đổi số nguyên quy định như sau:

- Không có hai loại nguyên ký khác hơn là char và char ký (nếu char được ký kết) có trách nhiệm có cùng cấp bậc, ngay cả khi họ có cùng một đại diện .

- Thứ hạng của một loại số nguyên đã ký phải lớn hơn xếp hạng của bất kỳ loại số nguyên nào có dấu có kích thước nhỏ hơn.

- Xếp hạng dài dài int phải lớn hơn xếp hạng dài int, phải lớn hơn cấp bậc của int, phải là lớn hơn xếp hạng của int ngắn, phải lớn hơn xếp hạng char đã ký.

- Mức xếp hạng của bất kỳ kiểu dữ liệu integer unsigned được xác định bằng thứ hạng của tương ứng ký số nguyên kiểu

- Mức xếp hạng của bất kỳ loại nguyên tiêu chuẩn sẽ lớn hơn cấp bậc của bất kỳ loại nguyên mở rộng với cùng kích thước.

- Thứ hạng của char sẽ bằng với cấp của char đã ký và chưa ký char.

- Thứ hạng của bool phải nhỏ hơn xếp hạng của tất cả các loại số nguyên chuẩn khác là .

- Các cấp bậc của char16_t, char32_t và wchar_t phải bằng các xếp hạng các loại cơ bản của chúng (3.9.1).

- Thứ hạng của bất kỳ loại số nguyên có dấu mở rộng nào khác tương ứng với loại số nguyên có dấu mở rộng có cùng kích thước là được xác định thực hiện, nhưng vẫn tuân theo các quy tắc khác cho xác định xếp hạng chuyển đổi nguyên.

- Đối với tất cả các loại nguyên T1, T2, T3 và, nếu T1 có thứ tự lớn hơn T2 và T2 có thứ tự lớn hơn T3, sau đó T1 sẽ có thứ hạng cao hơn T3.

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