Jeśli mamy ten przykładowy kod funkcji w C++Funkcja przeciążenia w C++ argumentów przechodzących przez wartość lub przez odwołanie
void foo(int x) { std::cout << "foo(int)" << std::endl; }
void foo(int& x) { std::cout << "foo(int &)" << std::endl; }
Czy możliwe jest różnicą jaką funkcję zadzwonić robić żadnych zmian w argumentach dzwoni?
Jeśli foo funkcja nazywa się w niektórych z tych sposobów:
foo(10);
i = 10;
foo(static_cast<const int>(i));
foo(static_cast<const int&>(i));
to się nazywa pierwszy foo przeciążony funkcję, ponieważ nie może przechodzić przez odniesienie const argument const parametru. Ale jak możesz zadzwonić do drugiej funkcji przeciążenia foo? Gdybym wywołać następny sposób:
int i = 10;
foo(i);
Zdarza niejednoznaczne błąd, ponieważ obie funkcje są ważne dla tego argumentu.
W tym linku https://stackoverflow.com/a/5465379/6717386 wyjaśniono, w jaki sposób można go rozwiązać: używając obiektów zamiast wbudowanych typów i wykonując prywatny konstruktor kopiowania, więc nie można wykonać kopii wartości obiektu i należy go nazwać drugim foo przeciążenie i przekazanie obiektu przez odniesienie. Ale czy istnieje jakiś sposób z wbudowanymi typami? Muszę zmienić nazwę funkcji, aby uniknąć przeciążenia?
Próbowałaś 'foo (static_cast(i));' –
mvidelgauz
można użyć 'void foo (int x)' i 'void foo (? int * x) 'zamiast. – DimChtz
@mvidelgauz Tak, próbowałem tego samego błędu niż powyżej. :( –