2015-05-27 14 views
5

सी ++ से 11 मानक (मसौदा n3337) §5/9:टाइप रूपांतरण के संबंध में रैंक का मतलब क्या है?

- दोनों ऑपरेंड एक ही प्रकार है, तो आगे कोई रूपांतरण की जरूरत है।

- अन्यथा, यदि दोनों ऑपरेंड पूर्णांक प्रकार पर हस्ताक्षर किए हैं या दोनों अहस्ताक्षरित पूर्णांक प्रकार, कम पूर्णांक रूपांतरण रैंक के प्रकार अधिक से अधिक रैंक साथ संकार्य के प्रकार के लिए परिवर्तित किया जाएगा साथ संकार्य है ।

- अन्यथा, यदि संकार्य अहस्ताक्षरित पूर्णांक प्रकार है कि रैंक से अधिक या रैंक अन्य संकार्य के प्रकार के, के बराबर है पर हस्ताक्षर किए पूर्णांक प्रकार के साथ संकार्य प्रकार के लिए परिवर्तित किया जाएगा अप्रमाणित पूर्णांक प्रकार के साथ ऑपरेंड।

- अन्यथा, यदि हस्ताक्षर किए पूर्णांक प्रकार के साथ संकार्य के प्रकार अहस्ताक्षरित पूर्णांक प्रकार के साथ संकार्य के प्रकार के मूल्यों के सभी का प्रतिनिधित्व कर सकते हैं, अहस्ताक्षरित पूर्णांक प्रकार के साथ संकार्य किया जाएगा के प्रकार के लिए परिवर्तित हस्ताक्षरित पूर्णांक प्रकार के साथ ऑपरेंड।

- अन्यथा, दोनों ऑपरेटरों को हस्ताक्षरित पूर्णांक हस्ताक्षर पूर्णांक प्रकार के साथ ऑपरेंड के प्रकार से संबंधित प्रकार में परिवर्तित किया जाएगा।

इस संदर्भ में रैंक का क्या मतलब है?
निश्चित रूप से यह std::rank की चर्चा करते हुए नहीं,
कि के रूप में एक सरणी में आयामों की संख्या के साथ क्या करना है ...

अभिन्न प्रकार के संदर्भ में और चल बिन्दु प्रकार, मैं इसे अपनी क्षमता आकार को संदर्भित करता है लगता है ।

सी ++ स्टैंडर्ड गारंटी देता है कि:

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

हूँ मैं सही तो माना कि रैंकों तो कर रहे हैं:

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

मैं प्रत्येक प्रकार के लिए रैंक के स्तर का वर्णन कहीं भी list नहीं ढूंढ पाया।

+0

4.13/पी 1 ([conv.rank] देखें)। – 0x499602D2

+0

@ 0x499602D2 Yup, यही वह है जिसे मैं ढूंढ रहा था। –

उत्तर

6

4.13 section का कहना है कि

हर पूर्णांक प्रकार एक पूर्णांक रूपांतरण रैंक परिभाषित के रूप में निम्नानुसार है:

- कोई दो पर हस्ताक्षर किए पूर्णांक प्रकार चार के अलावा अन्य और हस्ताक्षर किए चार (यदि चार हस्ताक्षरित किया गया है) करेगा एक ही रैंक है, भले ही उनके पास प्रतिनिधित्व हो।

- हस्ताक्षरित पूर्णांक प्रकार का रैंक के रैंक से अधिक होगा जो किसी छोटे आकार के साथ किसी भी हस्ताक्षरित पूर्णांक प्रकार से अधिक होगा।

- लंबे लंबे int की रैंक लंबे int के रैंक से अधिक होगी, जो int के रैंक से अधिक होगी, जो छोटी int के रैंक से अधिक होगी, जो कि उससे अधिक होगी हस्ताक्षर किए गए चार का रैंक।

- किसी भी अहस्ताक्षरित पूर्णांक प्रकार के पद के पद के बराबर होगी वाली संबंधित हस्ताक्षर किए पूर्णांक प्रकार

- किसी भी मानक पूर्णांक प्रकार के पद एक ही साथ किसी भी विस्तारित पूर्णांक प्रकार के पद से अधिक होना होगा आकार।

- चार का रैंक हस्ताक्षरित चार के रैंक के बराबर होगा और हस्ताक्षर किए गए char।

- बूल का रैंक अन्य सभी मानक पूर्णांक प्रकारों के रैंक से कम होगा।

- char16_t, char32_t, और wchar_t के रैंक उनके अंतर्निहित प्रकारों (3.9.1) के रैंक के बराबर होंगे।

- किसी भी बढ़ाया पर हस्ताक्षर किए पूर्णांक प्रकार एक और के सापेक्ष के पद विस्तारित एक ही आकार के साथ पूर्णांक प्रकार पर हस्ताक्षर किए कार्यान्वयन से परिभाषित, लेकिन अभी भी पूर्णांक रूपांतरण रैंक निर्धारित करने के लिए अन्य नियमों के अधीन है।

- सभी पूर्णांक प्रकार T1, T2, और T3 के लिए, यदि टी 1 टी 2 से अधिक रैंक है और टी 2 टी 3 से अधिक रैंक है, तो टी 1 अधिक से अधिक रैंक T3 से होगा।

संबंधित मुद्दे