我已经遇到过这个问题的调整.考虑:
class A {};
class B : private A {
static void foo();
};
void B::foo(){
B* bPtr1 = new B;
A* aPtr1 = dynamic_cast<A*>(bPtr1); // gives pointer
B* bPtr2 = dynamic_cast<B*>(aPtr1); // gives NULL
}
Run Code Online (Sandbox Code Playgroud)
aPtr1事实上,因为它是类型的B*,并且因为我们已经完全访问B并继承了它A,所以我希望两个转换都可以工作.但他们没有; 为什么?还有另一种方法来实现这种演员吗?
注意:
foo()不是B的成员,两个演员都会失败.B从A公开继承,两个演员都可以.Andrei Alexandrescu在Modern C++ Design中写道:
返回的对象
typeid具有静态存储,因此您不必担心生命周期问题.
安德烈继续说:
标准并不保证每次调用都会
typeid(int)返回对同一type_info对象的引用 .
即使标准不能保证这一点,如何在常见的编译器中实现,例如GCC和Visual Studio?
假设typeid没有泄漏(并且每次调用都返回一个新实例),每个应用程序,每个翻译单元,每个dll/so或者完全不同的东西,它是一个"表"吗?
有时间&typeid(T) != &typeid(T)吗?
我主要对Windows的编译器感兴趣,但是对于Linux和其他平台的任何信息也很感激.