相关疑难解决方法(0)

私有范围内私有继承的动态下转

我已经遇到过这个问题的调整.考虑:

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的成员,两个演员都会失败.
  • 如果BA公开继承,两个演员都可以.

c++ casting private downcast

18
推荐指数
1
解决办法
2021
查看次数

什么时候typeid可以为同一类型返回不同的type_info实例?

Andrei AlexandrescuModern C++ Design中写道:

返回的对象typeid具有静态存储,因此您不必担心生命周期问题.

安德烈继续说:

标准并不保证每次调用都会typeid(int) 返回对同一type_info对象的引用 .

即使标准不能保证这一点,如何在常见的编译器中实现,例如GCC和Visual Studio?

假设typeid没有泄漏(并且每次调用都返回一个新实例),每个应用程序,每个翻译单元,每个dll/so或者完全不同的东西,它是一个"表"吗?

有时间&typeid(T) != &typeid(T)吗?

我主要对Windows的编译器感兴趣,但是对于Linux和其他平台的任何信息也很感激.

c++ compiler-construction language-design rtti typeid

10
推荐指数
1
解决办法
2893
查看次数