noexcept

    24熱度

    1回答

    我有點困惑與破壞者和noexcept。我的理解是,在C++ 11中,包括用戶定義在內的任何析構函數都隱含地是noexcept(true),即使我們從它那裏得到throw。如果出於某種原因需要這樣做,則必須明確指定noexcept(false)。 我看到的與GCC 4.7.2完全相反,用戶定義的析構函數,無論類和析構函數有多簡單,都暗含noexcept(false)。我在這裏錯過了什麼?是否有一些隱

    8熱度

    2回答

    以下結構編譯失敗下C++ 11由於這樣的事實,我已聲明的移動賦值運算符作爲noexcept: struct foo { std::vector<int> data; foo& operator=(foo&&) noexcept = default; }; 由編譯器生成的默認移動賦值運算符是noexcept(false)由於這樣的事實那std::vector<int>的移

    16熱度

    1回答

    考慮下面的程序: #include <type_traits> struct Thrower { ~Thrower() noexcept(false) { throw 1; } }; struct Implicit { Thrower t; }; static_assert(!std::is_nothrow_destructible<Implicit>::va

    1熱度

    1回答

    我注意到std::chrono::steady_clock::now在cplusplus.com的文檔中有noexcept說明符。不過,我還沒有在最新的C++ 11草案中找到任何這方面的規定(遺憾的是我沒有這個標準的副本)。 這是cplusplus.com文檔中的錯誤還是std::chrono::steady_clock::now有noexcept說明符?的steady_clock C++的11個

    3熱度

    1回答

    我讀過關於noexcept說明符和編譯器優化的不清楚的事情。當指定noexcept時,編譯器可以優化: 編譯時間(更快的編譯)。 執行時間(代碼運行速度更快)。 還是兩者兼而有之? 還是沒有?

    4熱度

    1回答

    通過C++標準( 當前草案http://isocpp.org/files/papers/N3690.pdf,第20.8.3節就是這樣一個地方),通過LLVM的libC++頭文件,我發現「see below」用作類型和異常規範。它似乎在沒有類型存在的情況下使用,但使用2字短語代替某種有效標識符似乎很奇怪。 它是否在標準或其他地方討論過?爲什麼/如何使用?

    14熱度

    2回答

    noexcept修飾符可以應用於lambda表達式嗎?如果是這樣,怎麼樣? 可以將noexcept作爲函數參數的約束嗎?例如,在下面的代碼中,其含義是回調函數必須是noexcept? //probably not valid code - I'm just trying to express the idea void f_async(std::function<void (int) noexc

    7熱度

    2回答

    我已經寫了下面的代碼來測試noexcept傳播跨函數調用,它似乎不工作,因爲我會想到的。在GCC 4.7.2中,一個函數可以直接或僅在作爲模板專用化參數傳遞時才能被有效地測試爲noexcept;但是不是作爲參數傳遞給模板化函數時,或作爲指向正常函數的函數指針 - 即使該函數將其形式參數聲明爲noexcept。下面的代碼: #include <iostream> #define test(f)

    1熱度

    1回答

    我在狀態機內調用了很多外部函數 - 或者明確地像sendMessage(...)或隱含地喜歡a!=b。到目前爲止,我一直試圖跟蹤可能拋出的東西,但隨着數量的增長,需要更好的方法。丟失一個異常並且允許它傳播到狀態機框架的代碼中顯然會造成很大的混亂。 我看到三個選項,但我希望有人能指出我一個更好的: 在每個onEntry,onExit和action將一個try catch。由於它們有很多,而且它們很漂

    3熱度

    1回答

    採取下面的代碼片斷: #include <type_traits> struct X { virtual ~X(); }; static_assert(std::is_nothrow_default_constructible<X>::value, "fail"); 在鐺SVN,它編譯罰款。但是,對於gcc 4.7.2,斷言失敗。哪一個是正確的? (如果gcc是正確的,爲什麼?)