与 RTTI 相比,使用您自己的类型标识符有什么优势吗?
例如
class A { virtual int mytype() = 0; };
class B : public A { int mytype() {return 1;} };
class C : public A { int mytype() {return 2;} };
可以更快吗?更少的开销?还是应该在这种情况下始终使用 RTTI?
最佳答案
在测试之前,不要假设 RTTI 的开销会比您的解决方案多/少。
您应该尝试这两种解决方案并衡量性能以获得可靠的答案。
几年前我实际上问过自己同样的问题,最后我添加了一个成员变量来“固定”类型测试,就像您所做的那样。结果我的代码被愚蠢的测试不必要地弄乱了,而一些 dynamic_cast<>
会做同样的工作(事实上,做得更好)。
我重构了代码以使用 dynamic_cast<>
从那时起,我就不会再回去了。
作为脚注:如果你的类是多态的,那么无论如何你已经为此“付出了代价”,所以只需使用 dynamic_cast<>
即可。 .
关于c++ - 显式类型标识符与 RTTI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6124616/