मुझे यह पता लगाने में आश्चर्य हुआ कि जीसीसी सामान्य कार्यों की बजाय वापसी प्रकार का उपयोग करते समय सरणी को वापस करने की अनुमति देता है। जैसा कि आप शायद जानते हैं कि सरणी की प्रतिलिपि नहीं बनाई जा सकती है, इसलिए यह काफी सीमित है लेकिन मुझे आपको कुछ ठंडा example दिखाएं।जीसीसी कार्य से लौटने के लिए सरणी को अनुमति देता है - बग या फीचर?
#include <iostream>
#include <typeinfo>
using namespace std;
auto func() -> int [5]
{
return {4, 56, 78, 4, 0};
}
int main()
{
cout << func()[2] << endl;
cout << typeid(func).name() << endl;
}
क्या यह एक कंपाइलर बग या कुछ नई सुविधा है?
दिलचस्प रूप से 'टाइपिड' रिटर्न 'FA5_ivE' जिसे 'int (()) [5]
' के रूप में ध्वस्त कर दिया गया है और इसका मतलब यह है कि आप 5 इंट के फ़ंक्शन को वापस करने के लिए वास्तव में क्या सोचते हैं।
संपादित करें: मैं rvalue संदर्भ में, लेकिन किसी भी सफलता के बिना लौटे सरणी बाउंडिंग की कोशिश की (संभव रूपों में से सबसे अधिक इस्तेमाल किया):
auto &&refArrayTemp{ func() };
लगता है कि इस एक्सटेंशन नहीं बल्कि बेकार है।
मैं वें लगता है: एक समान बग का दुरुपयोग करके हम प्रकार
int const volatile()
के साथ एक समारोह बना सकते हैं (क्वालिफायर अनुगामी-रिटर्न-प्रकार के निपटने से पहले scalars से छीन लिया जाता है) सरणी में एक 'स्थिर कॉन्स int [] 'एक है ... यदि ऐसा है, तो संकलक सही ढंग से व्यवहार कर रहा है। –@ बेसिलस्टारनकेविच ऐसा नहीं है; मैं 'func'' int' पैरामीटर ले सकता हूं और उन्हें लौटाए गए सरणी में रखा जाता है। – ecatmur