我在 Nmap's source code 中找到了这个:
/** This function MUST be overwritten on ANY class that inherits from
* this one. Otherwise getBinaryBuffer will fail */
virtual u8 * getBufferPointer(){
netutil_fatal("getBufferPointer(): Attempting to use superclass PacketElement method.\n");
return NULL;
} /* End of getBufferPointer() */
如果 getBufferPointer
是纯虚拟的,任何未能实现它的派生类都会在编译时被捕获。为什么选择运行时错误而不是编译器触发的错误会更好?
最佳答案
一个人不应该更喜欢运行时错误而不是编译时错误,尤其是当语言提供了一种更简单的方法来准确地做你想做的事情时,这也会产生编译器错误。在我 5 年多的 C++ 编码中,我从未遇到过使用您的方式创建方法的理由。
Run time error = 许多可能的原因,我需要自己的调试语句来找到它。可能还需要多次运行该程序。在你的情况下,我可能有其他类无法重写该方法,这可能会在某些未定义的点导致错误。
编译时错误 = 一个原因,我的编译器告诉我发生了什么。
关于c++ - 我应该在运行时或编译时强制执行 C++ 接口(interface)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34418506/