2011-04-22 24 views
14

雖然經歷了的C++ 0x的工作草案最後編輯我發現很多「noexcept」與「拋出:無」

  • 去除關鍵字noexcept
  • 除了文本的的拋出:無在相同的地方

反之亦然。只是一些例子:

  • 更換noexcept拋出:沒什麼20.6.4指針安全[util.dynamic.safety]template<class T> T*undeclare_reachable(T*p);
  • 添加noexcept20.6.3.2。指針性狀成員函數[pointer.traits.functions]static pointer pointer_trait<T*>::pointer_to(...) noexcept;

的問題在這裏:

  • 是否有一個一般的規則/模式,我們會發現noexcept拋出:無在Std-Lib?
  • 用戶是否應該根據給定的規則導出特定行爲?即當他們他們應該或不應該添加noexcept到自己的功能?

回答

16

在馬德里我們強烈N3279的影響,其中包括以下原則:

制定的指導方針

  • 沒有圖書館的析構函數應該拋出。他們應該使用隱式提供的(非拋出)異常規範。

  • LWG同意不能拋出的每個庫函數都應該被標記爲無條件noexcept。

  • 如果庫函數,移動構造函數或移動賦值運算符是有條件的(即可以通過應用noexcept運算符證明不會拋出),那麼它應該被標記爲有條件的noexcept。沒有其他函數應該使用有條件的noexcept規範。

  • 爲與「C」代碼(如原子設施)兼容而設計的庫函數可能被標記爲無條件地noexcept。

我不會解釋這些準則,一定瞄準更廣泛的受衆。這主要是承認我們確實有添加noexcept的向後兼容性問題。如果我們弄錯了,noexcept比在下一個標準中刪除更容易。所以我們試圖申請一個既保守又系統的noexcept。

+0

我明白了。艱難的處境。我想我會讀一點多在WG21論文準備自己的到來,如*問題:「當我要補充'noexcept'我自己的職能?」 * N3279是一個很好的切入點。你還有什麼?例如,目前我建議'swap'應在用戶代碼'noexcept',並計劃按照有關*動指派*文學等用戶應該紀念他們的'noexcept'或者是隱含的假設就夠了嗎?我們可以期望編譯器從用戶那裏獲得(某天)的任何內容嗎? – towi 2011-04-22 14:33:38

+0

我目前沒有訪問實現noexcept的編譯器。所以我對這件事沒有任何個人建議(實驗對我來說很重要)。你可以在這裏找到所有WG21論文:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/ – 2011-04-22 14:52:33

+0

謝謝,我將密切關注編譯器的筆記。是的,我深入到那些文件已經:-) – towi 2011-04-22 15:15:08

相關問題