tej pory wiem, że jeśli chcesz przekazać wartości domyślnej dla argumentu do funkcji, która jest obiektem, robisz to tak:domyślne wartości obiektu w funkcji z domyślną argumentu wartości
void function(MyObject obj = MyObject()){
...
}
jednak , Ostatnio udało mi się znaleźć interesującą składnię, co mnie wprawia w zakłopotanie. Co się dzieje, gdy wywołujemy taką funkcję?
void function(MyObject obj = 0){
...
}
Uwaga, mijamy obiekt, a nie wskaźnik. Powyższy kod kompiluje się dobrze, bez błędów i ostrzeżeń. I to zawsze wywołuje konstruktor z jednym argumentem - MyObject jest zdefiniowany następująco:
class MyObject{
public:
MyObject(double n){std::cout << "Argumented\n";}
MyObject(){std::cout << "Default\n";}
};
Również gdzie jest to zachowanie udokumentowane (bo szukałem i nie mógł go znaleźć)?
Standardowy rozdział C++ 4 (konwersja standardowa) i rozdział 12.3 (Specjalne funkcje członkowskie/Konwersje). A także 13.3.3.1 (niejawne sekwencje kowantacji). – jrok
@jrok Wielkie dzięki. –
Nie ma za co. Numery rozdziałów pochodzą z wersji roboczej n3337, ale oczekiwałbym, że będą takie same w oficjalnym (C++ 11) standardzie. – jrok