noexcept
is just your "promise" that the function will never allow an exception escaping from it, and the meaning is that if that instead happens your code will stop right there by calling std::terminate
instead of allowing the exception to escape.
Knowing that a function will never throw an exception allows the compiler to generate more efficient/compact code in the caller and allows the creation of more robust software (a software that immediately terminates when something that was not designed to handle happens is more robust that software that instead keeps running doing random things... this is something that many young programmers are confused about).
Exceptions unfortunately are not the only source of failures in C++, where you have the big elephant int the room of "undefined behavior", so writing truly robust software in C++ is an extremely difficult task because you should also avoid every potential undefined behavior (and that's close to impossible to do; for example can generate undefined behavior any integer math operation, any use of iterators, any array access, any pointer access, any uninitialized variable, any multiple unsequenced side effect to the same memory, any race condition... etc. etc.).
Note of course that even a perfectly "safe" low level language that has no undefined behavior but guaranteed runtime errors instead would be no "silver bullet" for writing truly robust software. The reason is that you can have sort of "undefined behavior" at a more logical level if your algorithms do not handle the way you wanted all cases that are presented to them.
In other words there's not much of a difference for the end user if your program does random things because of C++ undefined behavior or because you caught and handled an exception that was not sourcing where you thought it was coming from (what nothrow
wants to protect you from) or because your code simply didn't consider and handled that the customer contact data could have and empty phone number.
Undefined behavior concept of course is bad, and is there because allows generation of faster code. In my opinion it is debatable this should be the default in a programming language; other languages preferred a safer default environment and instead allow specifically marked "fast and dangerous" zones where the requirement is that a programmer never makes any low-level mistake.