W C++ podczas rzucania obiektem według wartości, jak: throw Exception(), utworzy to obiekt tymczasowy, w jaki sposób może zostać przechwycony przez odniesienie? Wiem, że to działa, ale jeśli byłaby to funkcja zwracająca wartość lub wywołanie funkcji, to by się nie udało bez dodawania const do typu, jaka jest różnica?Wyjątki C++ rzucane przez wartość catch przez odwołanie
7
A
Odpowiedz
6
pierwsze, kiedy piszesz
throw Exception();
co jest wyrzucane w rzeczywistości nie jest tymczasowy obiekt utworzony przez prvalue ekspresji Exception()
. Koncepcyjnie istnieje oddzielny obiekt - obiekt wyjątku - zainicjowany z tego tymczasowego obiektu i jest to obiekt wyjątku, który jest faktycznie rzucany. (Kompilatory mogą jednak usunąć kopię/przenieść.)
Po drugie, reguły językowe mówią, że obiekt wyjątku jest zawsze uważany za lwartość. W związku z tym dopuszcza się powiązanie z niestanowiącymi stałych wartościami lwartości.
Powiązane problemy
- 1. Shiro: Posługiwanie się wyjątki rzucane przez adnotacje
- 2. Funkcja przeciążenia w C++ argumentów przechodzących przez wartość lub przez odwołanie
- 3. C# WCF catch Fault Wyjątki typu Base
- 4. C++ lambda capture przez wartość
- 5. Co jest nie tak z przekazywaniem iteratora C++ przez odwołanie?
- 6. Czy metody rozszerzeń C# umożliwiają przekazywanie parametrów przez odwołanie?
- 7. Castle Windsor: tłumi wyjątki zgłaszane przez Resolve()
- 8. Błąd Guzzle Curl nie catche przez instrukcję catch catch (Laravel)
- 9. Jak pisać wyjątki zdefiniowane przez użytkownika w C#?
- 10. wartość zwracana przez system() w C
- 11. Oblicz wartość mieszania MD5 przez C++ WinAPI
- 12. Czy rzut w połowie (...) rzucać przez wartość lub przez odniesienie
- 13. Php przekazany przez wartość lub przez odniesienie
- 14. Przekazywanie zmiennej przez odwołanie do rozszerzenia PHP
- 15. Call razem przejść przez odwołanie został usunięty
- 16. jak poznać możliwe wyjątki podczas korzystania z funkcji catch catch?
- 17. Sortowanie ConcurrentDictionary przez wartość
- 18. wartość Tuple przez kluczowego
- 19. C++ ponowne wyjątek złowionych przez
- 20. Jak spowodować zrzut C++ do zrzutu jądra, jeśli wyjątek byłby obsługiwany przez konkretny blok catch
- 21. Jak przekazać zmienną przez odwołanie do obsługi zdarzeń w javascript?
- 22. Pass od odniesienia droższe niż przechodzić przez wartość
- 23. C99 const przejść przez wartość
- 24. Rails, zamówienia przez wartość zagnieżdżonego
- 25. Czy wartość zwracana przez IOCTL:
- 26. Jak przypisać wartość przez wyrażenie?
- 27. maksymalna wartość reprezentowana przez biginta
- 28. Dlaczego wyjątki nie są propagowane przez program rozsyłający WPF Dispatcher.Invoke?
- 29. Dlaczego zmiany prototypów nie są przekazywane przez odwołanie do metody?
- 30. Dziedzicz wyjątki w C++
Wyjątkiem są różne zwierzęta, mają swoją własną semantykę. –
możesz rozwinąć? – shd
to długi temat ... 3 godziny wyjaśnień tutaj: https://www.youtube.com/watch?v=W7fIy_54y-w IIRC, książka Scotta Meyersa zawiera również rozdziały na ten temat ... –