इस कोड:क्यों {} पहले क्रम में std :: nullptr_t में परिवर्तित किया गया?
#include <iostream>
#include <vector>
using namespace std;
void dump(const std::string& s) {
cout << s << endl;
}
class T {
public:
T() {
dump("default ctor");
}
T(std::nullptr_t) {
dump("ctor from nullptr_t");
}
T(const T&) {
dump("copy ctor");
}
T& operator=(const T&) {
dump("copy operator=");
return *this;
}
T& operator=(std::nullptr_t) {
dump("operator=(std::nullptr_t)");
return *this;
}
T& operator=(const std::vector<int>&) {
dump("operator=(vector)");
return *this;
}
};
int main() {
T t0;
t0 = {};
return 0;
}
default ctor
operator=(std::nullptr_t)
क्यों std::nullptr_t
साथ operator=
चयनित किया गया था?
मुझे लगता है कि '{}' '' std :: nullptr_t' एक मानक रूपांतरण (वास्तव में, पहचान रूपांतरण, [over.ics.list]) है, लेकिन अन्य रूपांतरण उपयोगकर्ता परिभाषित हैं, क्योंकि परिणामस्वरूप उपयोगकर्ता परिभाषित प्रकार। –
आमतौर पर जब मैं एक प्रकार 'टी' देखता हूं तो यह एक टेम्पलेट पैरामीटर है। यह मुझे एक सेकंड के लिए भ्रमित कर दिया। –