2015-12-17 5 views
7

std::strtol के हस्ताक्षर के रूप में तैयार किया जाता है इस प्रकार है:हस्ताक्षर :: strtol

long strtol(const char *str, char **str_end, int base);

मैं वास्तव में दूसरा पैरामीटर प्रकार const char** के होने की उम्मीद। इसके बजाय कोई स्पष्टीकरण क्यों char** है? ध्यान दें, const char** प्रकार के चर को संशोधित करना संभव है। आप क्या संशोधित नहीं कर सकते हैं char* const * चर है।

+0

यह फ़ंक्शन 'str_end' पॉइंटर_ को बदलता है, यही कारण है कि इसे केवल 'char **' – ForceBru

+0

होना चाहिए क्योंकि संभवतः सी में फ़ंक्शन घोषित किया गया है, और सी ++ संगत होना चाहता है। सी के रूप में इसे क्यों घोषित किया गया है, यह शायद पुराने कोड के साथ पिछड़ा संगतता के लिए है। सटीक कारण के लिए आपको मानक समिति से पूछना है। –

+0

@ जोचिमपिलबोर्ग: इससे ज्यादा समझ नहीं आती है क्योंकि पहला पैरामीटर 'कॉन्स्ट' है। –

उत्तर

9

पहले के दिनों में (सी 0 9 से पहले) सी में const की कोई अवधारणा नहीं थी और सब कुछ सादा char* था।

char* के बाद से परोक्ष सबसे पुस्तकालय कार्यों के हस्ताक्षर बदलते const एक मुद्दे के बहुत ज्यादा नहीं था समर्थन करने के लिए एक char const* में बदला जा सकता। char** लेकिन एक char const** में परिवर्तित नहीं किया जा सकता है, क्यों

enter image description here

सी के बाद से समिति अधिक भार का समर्थन नहीं करता के लिए सी ++ मानक से निम्नलिखित नोट दिखाई विरासत कोड तोड़ने, या हर किसी के लिए मजबूर कर के बीच चयन करने के लिए किया था char** में पास करने के लिए। न तो आदर्श है लेकिन ऐसा लगता है कि वे बाद वाले के साथ गए थे।

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