2009-03-19 10 views
6

यहां होता:सी ++ में शाब्दिक के संदर्भ में गुजरते समय क्या होता है?

double foo(const double& x) { 
    // do stuff with x 
} 

foo(5.0); 
  1. संकलक एक गुमनाम चर बना है और 5.0 के लिए अपने मूल्य निर्धारित करता है?
  2. क्या एक्स केवल पढ़ने योग्य स्मृति में स्मृति स्थान का संदर्भ देता है? यह एक अजीब शब्दों है, मुझे पता है ...

संपादित: मैं स्थिरांक कीवर्ड ...

उत्तर

6

एक अस्थायी चर इस उद्देश्य के लिए बनाई गई है और यह आमतौर पर ढेर पर बनाया गया है।

आप const_cast करने का प्रयास कर सकते हैं, लेकिन यह वांछित है, क्योंकि फ़ंक्शन लौटने के बाद आप एक चर का उपयोग नहीं कर सकते हैं।

+0

यह मेरे लिए बहुत अक्षम है। घोषित मूल्य के साथ केवल पढ़ने के खंड में मेमोरी लोकेशन बनाना और स्टैक पर एक चर बनाने के बजाय इसका उपयोग करना बेहतर नहीं होगा? दृश्यों के पीछे सभी, निश्चित रूप से ... –

+0

यह कार्यान्वयन वैसे भी निर्भर है। और डबल इतना बड़ा नहीं है। – sharptooth

+0

अस्थायी परिवर्तनीय निर्माण ऑब्जेक्ट्स के लिए भी अच्छा है। डबल होने के बजाय यदि यह कक्षा थी तो एक अस्थायी वस्तु उत्पन्न हो गई होगी और इसके निर्माता को भी बुलाया जाएगा। –

1
  1. क्या संकलक शायद स्थिरांक शाब्दिक पैदा करता है भूल गया, लेकिन यह है कि एक चर नहीं है।
  2. एक गैर-कॉन्स्ट संदर्भ एक शाब्दिक को इंगित नहीं कर सकता है।

    $ जी ++ test.cpp test.cpp: समारोह में int main()': test.cpp:10: error: invalid initialization of non-const reference of type 'double&' from a temporary of type 'double' test.cpp:5: error: in passing argument 1 of डबल foo (डबल &) '

test.cpp:

#include <iostream> 

using namespace std; 

double foo(double & x) { 
    x = 1; 
} 

int main() { 
    foo(5.0); 

    cout << "hello, world" << endl; 
    return 0; 
} 

दूसरी ओर, आप दे सकते हैं निम्नानुसार एक कॉन्स संदर्भ के लिए एक शाब्दिक। test2.cpp:

#include <iostream> 

using namespace std; 

double foo(const double & x) { 
    cout << x << endl; 
} 

int main() { 
    foo(5.0); 

    cout << "hello, world" << endl; 
    return 0; 
} 
संबंधित मुद्दे