ठीक है, जहां तक सी ++ 98/03 का संबंध है, वहां कोईlong long int
नहीं है। तो मुझे लगता है कि आप सी ++ 11 के बारे में पूछ रहे हैं।
streamsize
और streamoff
एक अभिन्न प्रकार के typedefs होना भी आवश्यक है (streampos
एक पूर्णांक नहीं है, तो आप कुछ भी है कि एक long long
लेता है गुजर नहीं किया जाएगा कि)। चूंकि अभिन्न प्रकार मूल प्रकार हैं, इसलिए उन्हें केवल सी ++ या कंपाइलर-विशिष्ट परिभाषा के रूप में परिभाषित किया जा सकता है।
इस प्रकार, एकमात्र प्रश्न यह है: क्या ये टाइपपीफ long long
से अधिक हैं? सभी अभिन्न प्रकार एक बड़े या बराबर आकार के रूप में परिवर्तनीय होते हैं (हस्ताक्षरित/हस्ताक्षरित बावजूद, लेकिन यहां सभी प्रकार के हस्ताक्षर किए गए हैं, इसलिए कोई समस्या नहीं है)। लेकिन अगर यह बड़ा है ... आप इसके बारे में क्या करने जा रहे हैं?
मान लीजिए कि आप उस फ़ंक्शन के हस्ताक्षर को नहीं बदल सकते हैं जिसे आप "इंजेक्शन" कर रहे हैं (क्योंकि यदि आप कर सकते हैं, तो पैरामीटर प्रकार के रूप में streamsize
नहीं लेना और इस प्रकार समस्या से बचने का कोई कारण नहीं है), तो आप ' टी के पास कोई विकल्प नहीं है। आपके पास डेटा मान है जो फ़ंक्शन के मुकाबले बड़ा होता है। यहां चारों ओर घूमने का कोई तरीका नहीं है।
आप कंपाइलर को बंद करने के लिए long long
में एक static_cast कर सकते हैं, लेकिन वास्तविक आकार long long
में फिट नहीं हो सकता है, तो इससे कोई मदद नहीं करेगा।
आखिरकार, यह एक अव्यवस्थित समस्या है। आपके पास एक ऐसा फ़ंक्शन है जो एक पैरामीटर लेता है जो आप जो भी पारित कर रहे हैं उसके लिए संभावित रूप से बहुत छोटा है। सबसे अधिक आप यह कर सकते हैं कि यह static_assert
के माध्यम से कोई समस्या हो सकती है। कुछ ऐसा:
static_assert(sizeof(std::streamsize) <= sizeof(long long), "Oops.");
ईमानदार होने के लिए, मैं इसके बारे में चिंता नहीं करता। बाधाएं अच्छी हैं कि long long
सबसे बड़ा अभिन्न आकार होगा जो आपका कंपाइलर मूल रूप से समर्थन करता है।
स्रोत
2012-10-08 00:44:50
एक्साबाइट्स फ़ाइल आकार के मामले के अलावा, लंबे समय तक रूपांतरण के दौरान कोई समस्या हो सकती है? – Vincent
@ विन्सेंट: नहीं। इंटीजर प्रकारों को बिना किसी समस्या के बड़े (या बराबर आकार) पूर्णांक प्रकार में परिवर्तित किया जा सकता है। –
'streampos' स्पष्ट रूप से 'स्ट्रीमऑफ' में परिवर्तित हो जाता है, इसलिए आप इसे 'लंबे समय तक' की उम्मीद करने वाले किसी चीज़ को पास कर सकते हैं। 'Streampos' और 'streamoff' के बीच का अंतर राज्य के चरित्र एन्कोडिंग के लिए समर्थन है। – Potatoswatter