C++ has a different exception specifier

这篇具有很好参考价值的文章主要介绍了C++ has a different exception specifier。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这个报错:

error: declaration of ‘virtual const void* int8EntroyCalibrator::readCalibrationCache
(std::size_t&)’ has a different exception specifier

正常来说就是你声明的函数定义和真正函数实现的时候,参数或者函数类型不一致,仔细检查,把参数复制成一样的即可,但是我的确定不存在不一致的问题,
继承了基类,实现了对应的虚函数,最后的问题是出在throw()和noexcept两个关键字上,二者的目标都是限制函数的异常安全性,使函数不抛出任何异常,但是不能混用,这个其实就是c++11和c++98的定义的坑,
https://stackoverflow.com/questions/39188919/different-exception-specifier-with-g-6-2
Are you using C++11 or later?

The original operator new() declarations in C++98

throwing:   
void* operator new (std::size_t size) throw (std::bad_alloc);
 
nothrow:
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw();
 
placement:
void* operator new (std::size_t size, void* ptr) throw();

Have been changed in C++11 to use noexcept keyword:

throwing:   
void* operator new (std::size_t size);
 
nothrow:    
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;
 
placement:  
void* operator new (std::size_t size, void* ptr) noexcept;

基类中的函数后面有noexcept=0修饰,noexcept=0是一种特殊的异常说明符,它表示函数是一个纯虚函数(即抽象函数),并且不会抛出异常。纯虚函数是指在基类中声明但没有实现的虚函数,它的实现由派生类提供。

当在基类中声明一个纯虚函数时,可以使用noexcept=0来指定该纯虚函数不会抛出异常。这样,派生类在实现该纯虚函数时也需要保持不会抛出异常的性质,否则会导致编译错误

所以,派生类在实现时也要加上noexcept关键字表示不会抛出异常,即可解决问题:文章来源地址https://www.toymoban.com/news/detail-624121.html

//声明时:
bool getBatch(void* bindings[], const char* names[], int nbBindings) noexcept override;
//实现时:
bool int8EntroyCalibrator::getBatch(void* bindings[], const char* names[], 
int32_t nbBindings) noexcept
{
      .......
      }

到了这里,关于C++ has a different exception specifier的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL启动时出现initialize specified but the data directory has files in it. Aborting问题

    你是否遇见以下问题在MySQL重启时出现问题,报出了以下的错误,现在我将告诉你遇见以下错误怎么处理。 当出现了上面的错误,我们可以看出它提供了两条命令“systemctl status mysqld.service”和“journalctl -xe”来帮助我们来查看错误的详情。 使用“systemctl status mysqld.service”命

    2024年02月16日
    浏览(41)
  • c++中set_difference这个函数的意义和用法

    今天正好碰到了这个函数,虽然大概可以猜出这个函数的作用,但是仍然期待一个通俗易懂的解释,网上搜索了一下,搜到百度百科,感觉没有抓住重点,虽然示例也勉强可以理解,但是总感觉讲究不够直观。 下图绿色部分就是这个函数的功能了。   于是,最终在Notion的帮

    2024年02月01日
    浏览(56)
  • Selenium Exception AttributeError: “‘Service‘ object has no attribute ‘process‘“

    服务端:win10 professional 22H2; python环境:python3.9.16+centos 7+selenium 4.8.0+firefox 68.10.0esr+geckodriver v0.32.1; 将被测程序部署在win10物理机上,在centos 7中运行pycharm。起初运行时,日志提示服务异常退出。搜索后得知大概率是因为驱动路径不对,或者驱动的版本不对。我这里的问题是驱

    2024年02月12日
    浏览(30)
  • ElasticSearch创建索引报错:mapper_parsing_exception Root mapping definition has unsupported parameters

    ElasticSearch版本号:5.6.14,这个错误和ES版本有一定的关系,还是先交代下版本号,免得有的读者根据我的方法操作后无效 错误翻译: mapper_parsing_exception :映射解析异常 Root mapping definition has unsupported parameters :根映射定义包含不受支持的参数 错误映射语句1: 错误映射语句

    2024年02月11日
    浏览(56)
  • Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred……

    本人使用 idea 创建 web 工程后,运行 tomcat 服务器时出现报错: 并且 tomcat 出现错误信息: 本人尝试更换 JDK 版本,但并没有什么变化。最后发现是忘了修改 Project Structure... 中的 SDK 。 由于需要修改配置的地方较多,很容易漏掉一小步,下面整理了比较全面的需要修改的地方

    2024年02月07日
    浏览(62)
  • VMware Workstation 不可恢复错误: (vcpu-1) Exception 0xc0000005 (access violation) has occurred终极解决方案

    VMware Workstation 不可恢复错误: (vcpu-0) Exception 0xc0000005 (access violation) has occurred. 尝试了网上一切能找到的方法,都无法解决,实际上还是问题根源没找到。 你们可以先用前面几种解决方案试试,如果能够解决就好,说明你的问题就是其中一种。 但是最苦恼的是不知道什么原因

    2024年02月03日
    浏览(58)
  • Error: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Progra

    本人学化学的小白,自学JAVA。本来电脑第一次本来装JDK17的时候,应该是装成功了,后来eclipse出了点问题,我以为是JDK17的问题,就卸载重装, 结果就悲剧了。 每次重装都有问题,win命令行输入java -v都显示下面错误。 在csdn里搜到好多方法 这个原因是因为在安装JDK的时候在

    2023年04月09日
    浏览(50)
  • Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program wi

    win10安装java(jdk或jre) 环境报错: Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program wil 一,下包安装java 二,解决报错 大功告成 环境报错: Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program wil 在官网下载jdk包 官网地址 直接下

    2024年02月07日
    浏览(47)
  • Jmeter启动报错处理方法:Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurr

    一、切到jemter/bin路径,双击‘ApacheJMeter.jar’文件 二、切到jemter/bin路径,双击’jmeter.sh’文件 以上两种方法均可尝试。 网上CSDN、简书都说是内存不足改bat文件加,加全局变量,怀疑JDK版本和环境变量配置,装过无数遍,最终都不好使。这两种方法绕过了仅执行bat文件启动,

    2024年02月11日
    浏览(69)
  • [开发语言][C++]:递增递减运算符

    递增运算符和递减运算符为对象的+1和-1提供了简洁的书写形式。 自增自减运算符的应用: 这两个运算符除了应用在算术运算,还可应用于迭代器,因为很多迭代器并不支持算术运算。 递增和递减运算符有两种书写形式:前置版本和后置版本。 前置版本 ++i --i :首先将运算

    2024年01月25日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包