2013-02-16 5 views
11

क्या निम्न दो पंक्तियों को एक में संयोजित किया जा सकता है?क्या एक वैरिएबल को उसी लाइन पर एक आईट्रीम के साथ शुरू किया जा सकता है जिसे घोषित किया जाता है?

int foo; 
std::cin >> foo; 
+0

शायद 'int पुराना; std :: cin >> पुराना; '? –

+0

नहीं, अभी भी एक डुप्लिकेट। http://stackoverflow.com/questions/12279601/are-there-any-tricks-to-use-stdcin-to-initialize-a-const-variable – djechlin

+0

मैंने इस पुराने और शर्मनाक प्रश्न को फिर से शीर्षक दिया क्योंकि यह एक हो रहा है हाल ही में बहुत ध्यान दिया। –

उत्तर

16

स्मार्ट गधा जवाब:

int old; std::cin >> old; 

भयानक जवाब:

int old, dummy = (std::cin >> old, 0); 

उचित जवाब: old एक घोषणा साथ परिभाषित किया जा होने से पहले ही पारित किया जा सकता है एक तर्क के रूप में operator>> पर। एक चर की घोषणा के भीतर फ़ंक्शन कॉल प्राप्त करने का एकमात्र तरीका इसे उपरोक्त के रूप में प्रारंभिक अभिव्यक्ति में रखना है। स्वीकार किए जाते हैं जिस तरह से एक चर घोषित करने और इनपुट पढ़ने में के रूप में आपके द्वारा लिखी गई है:

int old; 
std::cin >> old; 
+0

अच्छा और उचित। +1। –

+0

क्यों एक और चर? – 6502

+1

स्मार्ट-गधे जवाब, lol। धन्यवाद, यह जानकारीपूर्ण है –

9

आप कर सकते हैं ...

int old = (std::cin >> old, old); 

साथ लेकिन तुम सच में उपयोग इस

+1

आह में अंतर्निहित रूपांतरण है, अच्छा बिंदु! चतुर। –

+1

@ 6502 हमें ऐसा क्यों नहीं करना चाहिए जो आप कहते हैं ?? – Mohammasd

2

ऐसा नहीं करना चाहिए एक समारोह:

int inputdata() 
{ 
    int data; 
    std::cin >> data; 
    return data; 
} 

तब:

int a=inputdata(); 

डेटा अपने आप के लिए:

int inputdata() 
{ 
    static bool isDataDeclared=false; 
    if (isDataDeclared==true) 
    { 
    goto read_data; 
    } 
    else 
    { 
     isDataDeclared=true; 
    } 
    static int data=inputdata(); 
    return data; 
    read_data: 
    std::cin >> data; 
    return data; 
} 
+1

लेकिन अब इसे 'डेटा' पर भी करें! –

+0

@ जोसेफमांसफील्ड मुझे लगता है कि, मूल प्रश्न में, कभी-कभी आप एक सिस्टम-डिफ़ॉल्ट के रूप में एक उपयोगकर्ता-इनपुट मान में एक वैरिएबल प्रारंभ करना चाहते हैं, एक अपरिभाषित मान या अपना खुद का मान जिसे आप परिभाषित करने से इंकार करते हैं। हालांकि, 'डेटा' के प्रयोजनों के लिए, मुझे लगता है कि इसमें "ऐसा करने" की कोई आवश्यकता नहीं है, क्योंकि यह केवल निष्पादन समय की सभी तीन पंक्तियों के लिए फ़ंक्शन के स्थानीय दायरे में मौजूद होगा, और शायद यदि फ़ंक्शन चिह्नित किया गया है इनलाइन के रूप में इसे पूरी तरह से अनुकूलित भी किया जा सकता है। 'int old = inputdata();' 'int पुरानी के बराबर हो सकता है; std :: cin >> पुराना; 'अगर ऐसा होता है। – thegreatjedi

1

शायद नहीं int के लिए, लेकिन अपने स्वयं के प्रकार के लिए:

class MyType { 
    int value; 
public: 
    MyType(istream& is) { 
     is >> *this; 
    } 

    friend istream& operator>>(istream& is, MyType& object); 
}; 

istream& operator>>(istream& is, MyType& object) { 
    return is >> object.value; 
} 

तो फिर तुम istream निर्माता को पारित कर दिया साथ प्रकार बना सकते हैं:

int main() { 
    istringstream iss("42"); 
    MyType object(iss); 
} 
संबंधित मुद्दे

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