g++ --std=c++11 main.cpp
साथ जीसीसी 4.8.4 का उपयोग आउटपुट इस कोडऑटो stdMaxInt = std :: अधिकतम <int> के लिए विफलता प्रकार में विफलता;
#include <algorithm>
template<class T>
const T& myMax(const T& a, const T& b)
{
return (a < b) ? b : a;
}
int main()
{
auto myMaxInt = myMax<int>;
myMaxInt(1, 2);
auto stdMaxInt = std::max<int>;
stdMaxInt(1, 2);
}
निम्नलिखित error
error: unable to deduce ‘auto’ from ‘max<int>’
auto stdMaxInt = std::max<int>;
ऐसा क्यों है myMax
लेकिन std::max
साथ नहीं के साथ काम करता है? और क्या हम इसे std::max
के साथ काम कर सकते हैं?
मुझे आपके प्रश्न का सटीक उत्तर नहीं पता है, लेकिन मुझे लगता है कि इसे इस तथ्य के साथ करना है कि ऑपरेंड योग्य होने पर std :: max को कॉन्स्ट एक्सप्रेशन के रूप में अधिभारित किया जाता है। आपके संस्करण में ऐसे अधिभार नहीं हैं, और इसलिए कोई अस्पष्टता नहीं है। विवरण में स्वयं को विसर्जित किए बिना इस समस्या से निपटने का सबसे आसान तरीका इस तरह के उपयोग परिदृश्य के लिए 'myMax' (या लैम्ब्डा, उदा।) का उपयोग करना है, लेकिन इसे इसके कार्यान्वयन में बस' std :: max' 'कहें। –
@Ike 'std :: max' एक तीसरा पैरामीटर, एक तुलना ऑब्जेक्ट लेने के लिए किसी अन्य हस्ताक्षर के साथ ओवरलोड किया गया है। कंपाइलर नहीं जानता कि कौन सा ओवरलोड का इरादा है। –
'decltype (auto) stdMaxInt = ...' C++ 14 के साथ स्पष्ट जानकारी दिखाता है – billz