为什么动态类型在C++运行时才知道?

Cas*_*let 1 c++ rtti

我已经阅读了1347691等其他问题,并知道动态和静态类型是什么.

但是,我很好奇为什么直到运行时才知道动态类型.毕竟,我们人类可以通过查看代码来决定动态类型.为什么编译器不能这样做?

实际上我们可以typeid用来决定所谓的运行时类型.编程/ RTTI.

那么为什么在"C++ primer 5th"一书中,作者仍然说

直到运行时才知道动态类型

nvo*_*igt 12

Shape* shape = nullptr;

int userinput = 0;

std::cin >> userinput;    

if(userinput == 17)
{
  shape = new Circle();
}
else
{
  shape = new Square();
}
Run Code Online (Sandbox Code Playgroud)

那么你能告诉我什么类型的形状,从编译时看代码?

  • (双关语)当然,这是一个"Square"或"Circle".(/双关语) (2认同)
  • 在各种简单的情况下是的,但一般来说,即使没有外部输入,它也相当于**停止问题**(循环/程序会停止吗?),这是NP困难的。所以它可能是可以决定的,但编译器也可能需要几(数亿)年才能决定。我想你不想等这个吧?:) (2认同)