Stroustrup wspomina D & E 11.2.4 „słowa kluczowego overload
”, że słowo kluczowe overload
powoduje problemy, gdy „łączenie” (lub używając) dwie biblioteki, które wykorzystywane zarówno tę samą nazwę funkcji (bez nazw *). Na przykład sqrt
w nagłówku C math.h
versus sqrt(complex)
z nagłówka C++ complex
. Jeśli jeden z nich ogłosił funkcję jak przeciążania, ale z drugiej strony nie trzeba było by zawierała wszystkie nagłówki w takiej kolejności, że przeciążenia została włączona przed wystąpieniem go:
// #include <complex>
overload sqrt;
complex sqrt(complex);
// #include <math.h>
double sqrt(double); // fine
// ---------------------------
// #include <math.h>
double sqrt(double);
// #include <complex>
overload sqrt; // ERROR: cannot allow overloading
// of an already declared function
complex sqrt(complex);
ewentualnego obejścia są „nie do opanowania w wszystkie najprostsze przypadki ".
(*) stanowi overload
kluczowe powstał przestarzały z CFront 2.0, wydany w 1989 roku Namespaces zostały wprowadzone do projektu standaryzacji w 1993
The pierwotnym zamiarem było słowo kluczowe do czynienia z dwoma obaw:
- Obawa, że mogą wystąpić niewykryte niejasności.
- Obawa, że program nie może być poprawnie powiązany, chyba że programista wyraźnie zadeklarował, które funkcje miały być przeciążone.
Dawny strach okazał się w dużej mierze bezpodstawny. Nieliczne problemy występujące w rzeczywistym użytkowaniu są rozwiązywane przez niezależne od zleceń reguły dotyczące przeładowania. Ten ostatni strach okazał się nie mieć podstaw w ogólnym problemie z C oddzielnymi regułami kompilacji, które nie miały nic wspólnego z przeciążaniem.
Proszę kupić/pożyczyć/przeczytać D & E. To naprawdę świetna książka z wieloma oświecającymi spostrzeżeniami. – dyp
@PravasiMeet To biblioteka języka C. Myślę, że dodanie czegoś takiego jak '#ifdef __cplusplus/* newline */overload sqrt;/* newline */# endif' może być uważane za jedno z tych "niewykonalnych" obejść, lub niemożliwe, jeśli zewnętrzny nagłówek biblioteki nie może zostać zmieniony – dyp
proszę wyjaśnić, co masz na myśli mówiąc dokładnie, pisząc "niemożliwe, jeśli zewnętrzny nagłówek biblioteki może nie zostać zmienionym "? – Destructor