有关警告
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&,是的 – 告诉我那不会发生 – 但我们正在追赶……