何故noexceptの方がthrow()より高速なコードを生成出来るのか?

Quick Q: Why can noexcept generate faster code than throw()?—StackOverflow : Standard C++

曰く、

With the C++98 approach, the call stack is unwound to f’s caller, and, after some actions not relevant here, program execution is terminated. With the C++11 approach, runtime behavior is a bit different: the stack is only possibly unwound before program execution is terminated.

throw()だとプログラムの実行を終了する前にcall stackの巻き戻しを行うのだが、noexceptではcall stackの巻き戻しを端折っても良いからとのこと。詳細は原文を参照。本文では実際には多くの関数はnoexcept指定はされていないが自ら例外は投げない(関数内で呼び出した別の関数が投げた例外を上位レイヤーに通知することはする)例外中立なものであること等にも触れられています。

http://aristeia.com/EC++11-14/noexcept%202014-03-31.pdf