2016-10-28 12 views
6

निम्नलिखित सी ++ कोड में double (*) double का अर्थ क्या है? यह किस प्रकार का रिटर्न प्रकार है?सी ++ टाइप परिभाषा अस्पष्ट

auto get_fun(int arg) -> double (*)(double) // same as: double (*get_fun(int))(double) 
{ 
    switch (arg) 
    { 
     case 1: return std::fabs; 
     case 2: return std::sin; 
     default: return std::cos; 
    } 
} 
+4

सी ++ 11 सभी तरह से जाएं: 'ऑटो get_fun (int arg) -> ऑटो (*) (डबल) -> डबल' – bolov

+0

यह भी देखें [इस सी ++ प्रकार की व्याख्या कैसे करें?] (Http: // stackoverflow .com/q/37844752/1314743) और बाहरी [जटिल सी/सी ++ घोषणाओं की व्याख्या कैसे करें] (http://www.codeproject.com/Articles/7042/How-to-interpret-complex-CC-declarations)। –

+1

@ बोल्व जो अश्लील है: डी – Quentin

उत्तर

7

double (*)(double) यह एक समारोह है कि एक double तर्क लेता है और double रिटर्न के लिए एक समारोह सूचक हस्ताक्षर है। आम तौर पर

X (*)(A, B, C) // any number of args 

कार्य करने के लिए एक सूचक है कि प्रकार (A, B, C) की आर्ग लेता है और प्रकार X, उदा का मान देता है

X my_func(A, B, C) { 
    return X(); // assuming this makes sense 
} 

ऊपर हस्ताक्षर का होगा।

तो आपके मामले में get_fun एक ऐसा फ़ंक्शन है जो फ़ंक्शन पॉइंटर लौटाता है।

2

double (*)(double)double पर फ़ंक्शन पर एक सूचक का प्रतिनिधित्व करने वाला प्रकार है और double लौटा रहा है।

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