Niedawno dowiedziałem się o specyfikatorze explicit
.Kiedy używać jawnego specyfikatora dla konstruktów wieloargumentowych?
Załóżmy, że mamy:
f(W, W, W);
Teraz jeśli robimy
f(42, 3.14, "seven");
Kompilator będzie próbował następujące niejawne konwersje:
f(W(42), W(3.14), W("seven"));
jeśli mamy zdefiniowane pasujące konstruktorów dla W , a mianowicie:
W(int);
W(double);
W(std::string);
... to się uda.
Jeśli jednak zrobić pierwszy jeden wyraźny:
explicit W(int);
... to wyłącza niejawna konwersja.
będzie mieć teraz napisać:
f(W(42), 3.14, "seven");
czyli zmusza cię jednoznacznie stwierdzić konwersję
Teraz na pytanie:
Jest możliwe, aby napisać:
explicit W(int,int); // 2 arguments!
Th jest kompilowany!
Ale nie widzę żadnego odpowiadającego scenariusza, który może wymagać tej składni.
Czy ktoś może podać minimalny przykład?
Część tego może być tylko ze względu na konsystencję, ponieważ funkcje wieloparametrowe mogą również mieć wartości domyślne, np. 'explicit W (int, int = 0);'. – Rufflewind