c – 了解C4673编译器警告

前端之家收集整理的这篇文章主要介绍了c – 了解C4673编译器警告前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有关警告 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&,是的 – 告诉我那不会发生 – 但我们正在追赶……

猜你在找的C&C++相关文章