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ł).