मुझे सी ++ टेम्पलेट्स के बारे में कोई प्रश्न है। निम्नलिखित कोड segfaults।सी ++ टेम्पलेट्स में segfault
template <typename T1, typename T2>
inline T1 const& max(T1 const &a, T2 const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4.9, 4) << std::endl;
}
हालांकि, & को हटा कर उसे सही काम करता है।
template<typename T1, typename T2>
inline T1 const max(T1 const &a, T2 const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4.9, 4) << std::endl;
}
इसके अलावा, केवल टी 1 और टी 2 के बजाय टी का उपयोग करें और यह ठीक काम करता है।
template<typename T>
inline T const& max(T const &a, T const &b) {
return a < b ? b : a;
}
int main() {
std::cout << max(4, 5) << std::endl;
}
मैं यहां क्या गलत कर रहा हूं?
कृपया बताएं कि संस्करण संख्या सहित आप किस कंपाइलर का उपयोग कर रहे हैं। यदि यह जीसीसी है, तो क्या आपने '-वॉल' के साथ संकलित किया है? ऐसी चेतावनी हो सकती है जिसे आप अनदेखा कर रहे हैं जो अपरिभाषित व्यवहार कर रहा है। –
कंपाइलर आपको अस्थायी के अधिकतम() कॉल रिटर्न संदर्भ बताएगा। – tristan
पहले दो कोड स्निपेट समान हैं? – asimes