Kiedy, jak i po co używać specyfikatora noexcept.

0

Witajcie,

Pytanie takie samo jak w temacie. Gdzie w tym sensie jak ma się to do klas w osobnych plikach. Czy dopisać to w pliku nagłowkowym/tylko w źródle/w obu? I co nam to daje gdy byśmy nie użyli tego specyfikatora (tj. jakie mamy z tego korzyści). Kompilator sam nie potrafi wykryć, że nie ma w funkcji bloku try()catch(){}? Szczególnie czy ma to znaczenie w gamedevie?

0

Czy dopisać to w pliku nagłowkowym/tylko w źródle/w obu?

nie masz wyjścia, jak już chcesz użyć to musisz dodać i w .h i w .cpp

I co nam to daje gdy byśmy nie użyli tego specyfikatora (tj. jakie mamy z tego korzyści).

to jest tak naprawde informacja dla programisty, taki "dobry styl" i stosujesz ( albo teoretycznie powinieneś ) wszędzie tam gdzie jesteś pewnien że dana funkcja nie rzuci wyjątku ale uważaj, bo jak zadeklarujesz funkcje jako noexcept to wtedy gdyby jednak ta funkcja rzuciła wyjątek nie złapiesz go w bloku try/catch - od razu poleci terminate.

Kompilator sam nie potrafi wykryć, że nie ma w funkcji bloku try()catch(){}?

Nie. Bo wyjątku nie może rzucić ani twoja funkcja ani żadna której wewnątrz niej używasz. Poza tym nie wszystko będziesz miał w bloku try catch bo przecież funkcja może rzucać coś "na zewnątrz" i to masz wtedy do obsłużenia w innym miejscu
( Ty albo inny programista który będzie tej funkcji używał).

1

Nie dawać!
To jest freature C++, który okazał się zbyt kłopotliwy, szczególnie jak masz utrzymywać binary compatibility.
W zasadzie tylko destruktory powinny być nothrow (domyślne założenie dla destruktorów w C++11).

0

Tu jeszcze fragment dot. nowszego C++:
(item 14): http://www.oreilly.com/free/effective-modern-c++.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1