加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 了解C4673编译器警告

发布时间:2020-12-16 03:40:19 所属栏目:百科 来源:网络整理
导读:有关警告 C4673的MSDN文章包含此示例,该示例使用特定消息发出警告: Base: this base class is inaccessible 06001 不幸的是,MSDN文章没有给出任何解释的问题.我不明白上面的代码有什么问题.为什么会发出警告? 这是MSVC 2013 – v120工具集. 解决方法 我可
有关警告 C4673的MSDN文章包含此示例,该示例使用特定消息发出警告:
Base: this base class is inaccessible

06001

不幸的是,MSDN文章没有给出任何解释的问题.我不明白上面的代码有什么问题.为什么会发出警告?

这是MSVC 2013 – v120工具集.

解决方法

我可以在 webcompiler上重现这个,警告的全文是:

main.cpp(28): warning C4673: throwing ‘Derv‘ the following types will not be considered at the catch site
main.cpp(28): warning C4670: ‘Base‘: this base class is inaccessible

那是真实的.如果我们有:

try {
    throw Derv();
}
catch (Base& ) {
    std::cout << "I caught it!";
}

该处理程序与Derv异常不匹配,因为Derv从Base私下继承,因此基类不可访问.所以在这个例子中,异常将是未被捕获的.

但是,如在MSDN示例中那样发出一个奇怪的警告,异常将被捕获:

catch(...) {}

因此,似乎警告实际上没有检查任何事情 – 这只是一般性发布警告,您可能正在做有害的事情,而无需实际检查您是否.这对我来说似乎不是一个特别有用的警告.如果我们赶上Base&,是的 – 告诉我那不会发生 – 但我们正在追赶……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读