में पॉइंटर को क्षय का क्षय क्यों करता है मुझे समझ में नहीं आता कि सरणी टेम्पलेट फ़ंक्शन में पॉइंटर का कारण क्यों है।सरणी टेम्पलेट फ़ंक्शन
यदि आप निम्न कोड को देखते हैं: जब पैरामीटर को संदर्भ (फ़ंक्शन f1) होने के लिए मजबूर किया जाता है तो यह क्षय नहीं होता है। दूसरे समारोह में यह decays। फंक्शन में टी का प्रकार एफ क्यों नहीं है (buff &) [3] बल्कि इसके बजाय चार * (यदि मैं इसे सही ढंग से समझता हूं)?
#include <iostream>
template <class T>
void f(T buff) {
std::cout << "f:buff size:" << sizeof(buff) << std::endl; //prints 4
}
template <class T>
void f1(T& buff) {
std::cout << "f:buff size:" << sizeof(buff) << std::endl; //prints 3
}
int main(int argc, char *argv[]) {
const char buff[3] = {0,0,0};
std::cout << "buff size:" << sizeof(buff) << std::endl; //prints 3
f(buff);
f1(buff);
return 0;
}
यदि आप बस एक ' टी' से 'एफ', फिर' टी' 'int 'होगा,' int' 'नहीं। इसलिए, आपको कुछ पूछना चाहिए "फ़ंक्शन में टी का प्रकार क्यों नहीं है 'char [3]' बल्कि' const char * '? ' (अपने उत्तर की तुलना में लापता '&' को नोट करें) –
... (मेरी अंतिम टिप्पणी से फ़ॉलो करें)। सी/सी ++ भाषा के बारे में सबसे बेवकूफ बात यह है कि यदि आप अपने पैरामीटर में 'कॉन्स्ट चार [3]' डालते हैं, तो संकलक चुपचाप इसे 'कॉन्स्ट char *' के रूप में फिर से लिख देगा। यह स्थानीय चर के साथ नहीं होता है, उदाहरण के लिए। मुझे सच में लगता है कि इससे आजकल चेतावनियां होनी चाहिए (कम से कम सी ++ कंपाइलर्स से) –