Definiuje operator<<
w przestrzeni nazw Foo
. Dlaczego można go nazwać globalnym zasięgiem?Zrozumienie zakresu operatorów w C++
Odpowiedz
DRTL
Kompilator może znaleźć zdefiniowany przez użytkownika operator<<
przez argumentu zależne odnośnika.
Wyjaśnienie
Wezwanie
std::cout << Foo::Baz();
jest właściwie skrótem infix dla
operator<<(std::cout, Foo::Baz());
Ponieważ wywołanie funkcji jest niewykwalifikowany (czyli bez przedrostka przestrzeni nazw lub okolic nawiasach), kompilator nie tylko wykona zwykłe wyszukiwanie nazw (na zewnątrz z lokalnym zakresie funkcji), ale również odnośników argumentem zależne (a.k.a ADL) dla innych przeciążeń funkcji operator<<
we wszystkich związanych nazw z obu argumentów std::cout
i klasy Baz
się. Te powiązane przestrzenie nazw są w tym przypadku std
i Foo
.
odnośnika Zatem argument, zależny będzie znaleźć definicje
std::operator<<(std::ostream&, /* all the builtin types and Standard strings and streams */)
Foo::operator<<(std::ostream&, const& Baz)
Po imienin odnośnika, odliczenie argumentem zawiedzie dla wszystkich std::operator<<
przeciążeń. Właśnie dlatego rozdzielczość przeciążania wykryje, że zdefiniowany przez użytkownika Foo::operator<<
jest w rzeczywistości jedynym dopasowaniem. Dlatego tak się nazywa.
- 1. Potrzebujesz pomocy zrozumienie wykorzystanie operatorów bitowe
- 2. C++ przeciążanie operatorów konwersji
- 3. Zrozumienie ramek stosu w C
- 4. zrozumienie funkcji strlen w C
- 5. Jakie są typy zwracanych operatorów w C++?
- 6. O konstruktorów i przypisać operatorów w C++
- 7. Czy możliwe jest przeciążenie operatorów w C?
- 8. Zrozumienie C rozmontowanego połączenia
- 9. Zrozumienie składni programowania C
- 10. Określenie zakresu "leksykalnego" w C#
- 11. Zrozumienie Cel C wykonawcze
- 12. Zrozumienie C typedef
- 13. C# Domyślna rozdzielczość zakresu
- 14. Zrozumienie zamknięć w Pythonie
- 15. Zrozumienie C Wymagania inicjalizacji # pole
- 16. Zrozumienie Objective-C problem zakres
- 17. Tworzenie niestandardowych operatorów w RxJava2?
- 18. Zrozumienie i robienie wtrysku kodu w C
- 19. Zrozumienie zachowania Backspace (\ b) w C
- 20. Zrozumienie i pisanie wchar_t w C
- 21. Zrozumienie niektórych praktyk kodowania w C++
- 22. Zrozumienie dziedziczenia protokołu w Objective-C
- 23. Zrozumienie interfejsów kowariantnych i contravariant w C#
- 24. lepsze zrozumienie zewnętrznych funkcji "C"
- 25. Haskell - Przedefiniowanie (ukrywanie) operatorów arytmetycznych
- 26. C# interfejs nie może zawierać operatorów
- 27. Zrozumienie zachowania porównywania ciągów
- 28. Rozszerzanie istniejącej struktury w języku C# w celu dodania operatorów
- 29. Zestaw operatorów "w" Pythona
- 30. bitowe operatorów w PostgreSQL
TemplateRex, dziękuję bardzo za kompleksową odpowiedź! – Kolyunya
@Kolyunya Cieszę się, że mogłem pomóc! – TemplateRex