让我们假设两个变量:
int x = 10;
float y = 10.5;
在内存中分配了4个字节, 但这是如何工作的,因为使用int和float的操作是不同的?
遵循相同的逻辑:
Animal * d = new Dog ();
Animal是一个指向狗的指针,但指针是4个字节并存储一个地址。他怎么知道他是动物?所以稍后你可以做d.sound();
答案 0 :(得分:0)
声明告诉编译器两件事:
为变量分配多少内存。
使用变量执行计算时要生成哪种代码。
因此,当您使用类似x + 6
的表达式时,编译器将发出使用CPU的整数加法指令的代码。当您使用y + 6
时,它将发出使用浮点加法指令的代码。
如果调用期望与变量不同的类型的函数,或者在不同类型的变量之间执行赋值,则类型声明也用于确定何时转换值。例如。如果你有
void floatfun(float z);
并且您调用floatfun(x)
,编译器将生成代码,该代码计算相当于x
值的浮点值,并将其传递给函数。
当类型是结构或类时,声明进一步允许编译器确定可以使用哪些成员,以及如何将成员名称转换为访问它们的代码。编译器还知道基类和派生类之间的关系,因此它知道您可以将Dog*
分配给Animal*
,并执行适当的转换(在C ++中,这涉及一个名为虚表)。