2011-05-06 13 views
16

मुझे हाल ही में इस तथ्य से काटा गया था कि ios_base::width और/या setw मैनिपुलेटर reset with every item written to the stream होना चाहिए। बल्कि इस सेsetw() के साथ क्या सौदा है?

while(whatever) 
{ 
    mystream << std::setw(2) << myval; 
} 

: ठीक

mystream.width(2); 
while(whatever) 
{ 
    mystream << myval; 
} 

ठीक है,

है, तो आप इस करना चाहिए।

लेकिन क्या किसी को पता है कि यह डिज़ाइन निर्णय क्यों बनाया गया था? क्या कोई तर्क है कि मैं याद कर रहा हूं, या यह मानक के सिर्फ एक अंधेरे कोने है?

अन्य स्ट्रीम स्वरूपण संशोधक (जैसा कि लिंक किए गए SO प्रश्न में उल्लिखित है) 'चिपचिपा' हैं, जबकि setw नहीं है।

+0

भी देखें [कौन सा iomanip manipulators 'चिपचिपा' कर रहे हैं?] Http: // stackoverflow.com/q/1532640/2778484)। – chappjc

उत्तर

4

जिस तरह से मैं इसे देखता हूं वह है: यदि आप इसे समान रूप से लागू करना चाहते हैं तो आप हमेशा नीचे की तरह कुछ कर सकते हैं।

int width =2; 
while(whatever) 
{ 
    mystream << std::setw(width) << myval; 
} 

लेकिन अगर यह चिपचिपा था, जैसा कि आप का उल्लेख:

mystream.width(2); 
while(whatever) 
{ 
    mystream << myval; 
} 

और अगर मैं एक अलग चौड़ाई चाहता था हर पंक्ति मैं चौड़ाई की स्थापना रखना है।

तो अनिवार्य रूप से दोनों दृष्टिकोण लगभग समान हैं, और मैं अब जो कर रहा हूं उसके आधार पर उन्हें पसंद या नापसंद करता हूं।

5

जिन मैनिप्लुटरों को केवल अगले ऑपरेशन को प्रभावित करना चाहिए, वे सामान्य कार्यात्मक जरूरतों को बेहतर बनाने के लिए तार्किक और अनुभवजन्य अवलोकनों पर आधारित होते हैं, और इसलिए प्रोग्रामर के लिए लिखना और सही होना आसान होता है।

निम्नलिखित बातों मुझे भी उतना ही प्रासंगिक हड़ताल:

  • some_stream << x सिर्फ काम करना चाहिए सही समय के सबसे
  • सबसे कोड है कि चौड़ाई सेट तुरंत या बहुत शीघ्र ही बाद में मूल्य स्ट्रीम जाएगा, ताकि असंबंधित कोड कर सकते हैं मान कुछ "लंबित" चौड़ाई इसके उत्पादन
  • setfill()को प्रभावित करने वाले मूल्य नहीं होगी जब तक कि वहाँ एक लंबित setw() है, तो प्रतिकूल some_stream << x बयान को प्रभावित नहीं करेगा नहीं प्रासंगिक है हमारी सूची
    • केवल जब चौड़ाई स्पष्ट रूप से सेट किया जा रहा है टॉपिंग, प्रोग्रामर/विचार करना चाहिए कर सकते हैं कि भरने चरित्र राज्य बड़ा बुला संदर्भ
  • के अपने ज्ञान के आधार पर भी उचित है, यह एक के लिए बहुत आम है मूल्यों का वह समूह एक ही भरने चरित्र
  • hex और oct जैसे अन्य manipulators लगातार उपयोग करने के लिए, लेकिन उनके उपयोग कोड का एक खंड है कि या तो पहले वाली स्थिति या (बुरा लेकिन आसान) पॉप में आम तौर पर है इसे वापस सेट
  • दशमलव में

इस बिंदु से अग्रणी बिंदु जो आपके प्रश्न का उत्तर देता है ...

  • अगर setw() presistent थे, यह प्रत्येक स्ट्रीमिंग बयान के बीच रीसेट किया जा करने के लिए अवांछित भरने को रोकने के लिए (की आवश्यकता होगी ...
+6

मुझे लगता है कि 'हेक्स' चिपचिपा होने के समान ही मनमानी है जैसा कि 'सेटव' विपरीत है ... लेकिन पूर्णता के लिए एक उत्थान है (: – jwd

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