cost 306 ms
使用 noexcept 的程序被 msvc 和 clang 接受但被 gcc 拒絕

[英]Program using noexcept accepted by msvc and clang but rejected by gcc

我正在使用此處列出的書籍學習 C++。 特別是,我最近使用C++ 入門一書了解了 noexcept noexcept 現在,為了進一步理清我對該主題的概念並確認我理解正確,我正在編寫簡單的程序。 下面給出了一個使用 MSVC 和 Clang 但不使用 GCC 編譯的程序。 演示。 所以我的問題是哪個 ...

是否允許編譯器支持標准中刪除的功能?

[英]Are compilers allowed to support a feature, that is removed in the standard?

在第一段cppreference.com中明確指出throw(T1, ..., Tn)在 C++17 中被移除。 讓我感到困惑的是,一些編譯器在 C++17 模式下支持throw(T1, ..., Tn) (參見演示)。 MSVC 默認支持它,但您可以為其打開警告,請參閱C5040 。 它可以變 ...

是否有任何版本的 C++(甚至是預標准)是 `throw()` 並不意味着“永遠不能扔”?

[英]Was there any version of C++ (even pre-standard) were `throw()` did not mean “cannot throw, ever”?

問題是關於 C++ 的歷史:ISO 標准、修訂標准(帶 DR),甚至是標准草案; 都算作“C++”。 是否有任何 C++ 此屬性不成立: 使用空拋出規范throw()聲明的 function 不能拋出異常。 如果該屬性不成立,我想要一個反例。 注釋: 不言而喻,在function 中拋出異常,然后 ...

為什么舊的空拋出規范被重寫為新語法“noexcept”?

[英]Why was the old empty throw specification rewritten with a new syntax `noexcept`?

標題說明了一切:為什么 C++ 放棄了完全令人滿意、有用的空拋出規范throw()來用另一種語法替換它,引入新的關鍵字noexcept ? 空拋出規范是“只拋出這些枚舉異常的保證”(寫為throw(X,Y,Z) ),但枚舉異常為零:而不是拋出X 、 Y或Z (以及派生類型),您可以拋出空集:這是 ...

ˋtypedefˋ 中的異常規范完全禁止還是僅在頂層?

[英]Exception specification in ˋtypedefˋ completely forbidden or only at toplevel?

在 C++14 Sec 15.4;2 中聲明,...異常規范不應出現在 typedef 聲明或別名聲明中。 這意味着禁止以下行為: 但是,措辭不應出現是否意味着令牌noexcept不能出現在 typedef 聲明中的任何位置? 例如,這兩者是否也被禁止? 它們都試圖定義一個類型fn1和f ...

c ++ 1z動態異常規范錯誤

[英]c++1z dynamic exception specification error

我正在嘗試使用新的GCC版本7.2.1編譯我的項目,並且遇到動態異常規范的問題: error: ISO C++1z does not allow dynamic exception specifications MEMORY_ALLOC_OPERATORS(SQLException) ...

當繼承的類中沒有構造函數時,如何引發異常?

[英]how to throw an exception when there is no constructor in the inherited class?

我不確定這個問題是否合適,但我會盡力而為。 這是我的作業問題。 如果兩行平行或相等,作業會要求我拋出異常。 原始代碼由我的教授提供,我的工作是對其進行修改以使其能夠引發異常。 行 教授告訴我們不要修改頭文件,只能修改.cpp文件。 line.cpp 由於 ...

為什么std :: map find()沒有被聲明為noexcept?

[英]Why std::map find() is not declared as noexcept?

C ++ 14標准定義了std::map的find()成員函數,如下所示: 為什么這些函數沒有被定義為noexcept ? 內部可能出錯的地方,需要拋出一個異常或產生未定義的行為(除了沒有找到一個元素,在這種情況下函數返回一個end迭代器並且無論如何都不需要拋出異常)? ...

轉換到C ++ 11,其中使用noexcept隱式聲明析構函數

[英]Transitioning to C++11 where destructors are implicitly declared with noexcept

在C ++ 11中,沒有任何異常規范的析構函數使用noexcept隱式聲明,這是對C ++ 03的更改。 因此,用於從C ++ 03中的析構函數拋出的代碼仍然可以在C ++ 11中正常編譯,但是一旦嘗試從這樣的析構函數拋出就會在運行時崩潰。 由於這樣的代碼沒有編譯時錯誤,如何安全地轉換到 ...

在課外定義的默認移動操作的異常規范是什么?

[英]What is the exception specification for a defaulted move operation defined outside the class?

考慮這個課程: 因為C1的移動ctor在其第一個聲明中被明確默認,所以標准的8.4.2告訴我們它具有相同的異常規范(ES),就好像該函數已被隱式聲明一樣。 然后我們可以使用15.4 / 14和12.8 / 15來得出結論,它的ES是noexcept(true) 。 現在考慮一個C ...

如何獲取舊異常規范的警告

[英]How to get a warning on old exception specifications

我知道除了其他東西(比如auto_ptr)之外,C ++ 11中已經棄用了異常規范。 有沒有辦法從g ++ 4.8獲得以下代碼的警告? 我已經嘗試過-Wall -pedantic -Wextra -Wdeprecated-declarations ,但沒有任何成功。 ...

為什么在編譯時不檢查C ++異常規范?

[英]Why are C++ exception specifications not checked at compile-time?

我剛才讀到,在C ++ 11標准版本中,異常規范已被棄用。 我以前認為指定你的功能可能是好的做法,但顯然,不是這樣。 在閱讀了Herb Stutter引用得很好的文章之后 ,我不禁要問:為什么實際上是按照它們的方式實現了異常規范,為什么委員會決定棄用它們而不是在編譯時檢查它們? 為什么 ...

ocl :: CRException的Typeinfo

[英]Typeinfo for ocl::CRException

我試圖使用g ++運行我的C ++程序,但出現以下異常: “用於ocl :: CRException的typeinfo”正在使用包含CRException類的ocl命名空間。.請幫助我。 這是包含OCL類的代碼: ...

關於非拋出函數的困惑

[英]confusion about non-throw functions

我有2個關於非拋出函數的問題: 為什么要使函數不拋出異常? 如何使函數不拋出異常? 如果函數中的代碼實際上可能throw ,那么我是否仍應使其不拋出? 這是一個例子: 如果swap的代碼根本不會拋出,我還應該追加throw()嗎? 為什么? ...


 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM