2010-03-03 21 views
14

मुझे एक स्ट्रिंग को वापस करने के लिए एक फ़ंक्शन की आवश्यकता है जिसे केवल पढ़ने के लिए ही उपयोग किया जाएगा। स्ट्रिंग सामग्री संकलन समय पर ज्ञात है ताकि मैं वैसे भी एक स्ट्रिंग अक्षर का उपयोग करूंगा।एक फ़ंक्शन से सुरक्षित और पोर्टेबल से एक स्ट्रिंग शाब्दिक पता लौटा रहा है?

std::string myFunction() 
{ 
    return "string"; 
} 

या वापसी const char*:

const char* myFunction() 
{ 
    return "string"; 
} 

दूसरा विकल्प इस परिदृश्य में सुरक्षित और पोर्टेबल है

मैं std::string की तरह कुछ लौट सकते हैं?

उत्तर

12

क्या इस परिदृश्य में दूसरा वैकल्पिक सुरक्षित और पोर्टेबल है?

हाँ! स्ट्रिंग अक्षर का संग्रहण आवंटन स्थिर है और वे एप्लिकेशन के जीवनकाल के लिए बने रहते हैं।

+0

क्या आप अपने प्रमाण के लिए संदर्भ दे सकते हैं? –

3

हां। (यह वैश्विक डेटा संरचना में ऐसे सूचक को संग्रहीत करने से अलग नहीं है)।

10

हाँ! लेकिन इस संभावित पकड़ लिया सावधान रहना:

char * myFunc() { 
    return "Constant string?"; 
} 

हाँ, आप एक स्ट्रिंग एक गैर स्थिरांकchar * को शाब्दिक परिवर्तित कर सकते हैं! इससे आपको char * की सामग्री को संशोधित करने का प्रयास करके दुनिया को तोड़ने में मदद मिलेगी। विरासत कारणों के लिए यह "फीचर" मौजूद है - स्ट्रिंग अक्षरक कॉन्स से पुराने हैं, और मूल रूप से char * सी

g ++ डिफ़ॉल्ट मोड में भी इसके लिए एक अप्रिय चेतावनी फेंकता है, धन्यवाद। मुझे नहीं पता कि वीसी ++ उत्सुकता से चेतावनी को फेंकता है या नहीं।

+0

@ फिलिप: मैंने इसे वीएस -2008 में आजमाया और मुझे कोई चेतावनी नहीं मिली। मुझे नहीं पता कि इसके लिए कोई चेतावनी है या नहीं। शायद वहां और डिफ़ॉल्ट रूप से बंद हो गया है क्योंकि आपूर्ति किए गए शीर्षलेखों में से अधिकतर चेतावनी को ट्रिगर करेंगे ;-) – quamrana

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