扔
-
當
throw
出現在帶有運算元的表示式中時,其效果是丟擲異常 ,這是運算元的副本。void print_asterisks(int count) { if (count < 0) { throw std::invalid_argument("count cannot be negative!"); } while (count--) { putchar('*'); } }
-
當
throw
出現在沒有運算元的表示式中時,其效果是重新丟擲當前異常 。如果沒有當前異常,則呼叫std::terminate
。try { // something risky } catch (const std::bad_alloc&) { std::cerr << "out of memory" << std::endl; } catch (...) { std::cerr << "unexpected exception" << std::endl; // hope the caller knows how to handle this exception throw; }
-
當
throw
出現在函式宣告符中時,它引入了一個動態異常規範,該規範列出了允許函式傳播的異常型別。// this function might propagate a std::runtime_error, // but not, say, a std::logic_error void risky() throw(std::runtime_error); // this function can't propagate any exceptions void safe() throw();
從 C++ 11 開始,不推薦使用動態異常規範。
請注意,上面列出的 throw
的前兩個用法構成表示式而不是語句。 (throw 表示式的型別是 void
。)這使得它們可以在表示式中巢狀,如下所示:
unsigned int predecessor(unsigned int x) {
return (x > 0) ? (x - 1) : (throw std::invalid_argument("0 has no predecessor"));
}