exception-specification相关内容
此关键字是否有点违反直觉? 该函数不会引发任何异常,因此我们向其添加了throw()标记.应该是silent()还是类似的东西? 解决方案 从C ++ 17以前的角度来看:它可能是违反直觉的,但只是一会儿. throw(type,type,...)提供该函数可能抛出的异常类型的列表. throw()提供了一个 empty 类型列表,即该函数不能抛出任何类型的异常.
..
我正在尝试使用新的GCC版本7.2.1编译我的项目,并且在动态异常规范方面存在问题: error: ISO C++1z does not allow dynamic exception specifications MEMORY_ALLOC_OPERATORS(SQLException) 问题是这些错误来自我无法控制的第三方库. 有什么办法可以解决?据我所知,我不能告诉编译器
..
考虑一个类的以下两种可能的定义: 展览A: struct A { A() = delete; }; 图A': struct A { A() noexcept = delete; } 将已删除的函数声明为noexcept有什么意义吗? 解决方案 (最初将其发布为评论,但建议将其发布为答案.) 不,不.不能调用已删除的函数(或者在构造函数的情况下
..
标题说明了一切:为什么C ++放弃了完美令人满意,有用的空抛出规范throw() ,用另一种语法替换了它,并引入了新的关键字noexcept? 空抛出规范是“仅抛出这些枚举异常保证"(写为throw(X,Y,Z)),但枚举异常为零:不是抛出X,Y或Z(以及派生类型),您可以抛出空集:这是确保函数从不向调用者抛出任何东西的保证,换句话说,是永不抛出或“不抛出"规范. 那是使用实质上相同的
..
我尝试使用g ++运行我的C ++程序,但得到下面的异常: “typeinfo for ocl :: CRException”使用包含CRException类的ocl命名空间..请帮助我 这里是包含OCL类的代码: #ifndef VOIDSOFT_ADA2_LIND_HH #define VOIDSOFT_ADA2_LIND_HH #include
..
在C ++ 11中,没有任何异常规范的析构函数被隐含地声明为 noexcept ,这是C ++ 03中的一个变化。因此,C ++ 03中用于抛出析构函数的代码仍然可以在C ++ 11中编译,但是一旦它尝试从这样一个析构函数中抛出,就会在运行时崩溃。 由于这种代码没有编译时错误,如何将代码库中的所有和所有现有的析构函数声明为$ code> noexcept( false),这将是非常冗长和侵入
..
我知道这个功能将在C ++ 0x中被弃用,但对于我来说,作为一个总的新手,它似乎是一个好主意。有人可以向我解释为什么不是一个好主意? 解决方案 请参阅Herb Sutter的详细文章。他对设计的问题和缺点进行了最全面的解释。 实际看看异常细节 http://www.gotw.ca/publications/mill22 .htm
..
C ++标准说明了具有异常规范的虚拟函数的以下内容: 如果虚拟函数具有规范,在任何派生类中覆盖该虚函数的任何函数的所有声明(包括定义)只允许基类虚函数的异常规范所允许的异常(C ++ 03§15.4/ 3)。 因此,以下是不正确的: struct B { virtual void f()throw(){} //允许没有异常 }; struct D:B { virtual
..
我有一个异常类如下: #include struct InvalidPathException:public std :: exception { explicit InvalidPathException(){} const char * what()const; }; const char * InvalidPathExcepti
..
我一直在使用Howard Hinnant的堆栈分配器,它的工作方式类似于charm,但实现的一些细节 为什么全局运算符 new 和 delete used? allocate()和 deallocate()成员函数使用 :: operator new 和 :: operator delete 。类似地,成员函数 construct()使用全局布局new。为什么不允许任何用户定义的全局或类特定
..