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是正确的,为什么?)