声明如何在内存中起作用

时间:2014-08-28 01:33:52

标签: c++ memory allocation

让我们假设两个变量:

  int x = 10;
  float y = 10.5;

在内存中分配了4个字节, 但这是如何工作的,因为使用int和float的操作是不同的?

遵循相同的逻辑:

  Animal * d = new Dog ();

Animal是一个指向狗的指针,但指针是4个字节并存储一个地址。他怎么知道他是动物?所以稍后你可以做d.sound();

1 个答案:

答案 0 :(得分:0)

声明告诉编译器两件事:

  1. 为变量分配多少内存。

  2. 使用变量执行计算时要生成哪种代码。

  3. 因此,当您使用类似x + 6的表达式时,编译器将发出使用CPU的整数加法指令的代码。当您使用y + 6时,它将发出使用浮点加法指令的代码。

    如果调用期望与变量不同的类型的函数,或者在不同类型的变量之间执行赋值,则类型声明也用于确定何时转换值。例如。如果你有

    void floatfun(float z);
    

    并且您调用floatfun(x),编译器将生成代码,该代码计算相当于x值的浮点值,并将其传递给函数。

    当类型是结构或类时,声明进一步允许编译器确定可以使用哪些成员,以及如何将成员名称转换为访问它们的代码。编译器还知道基类和派生类之间的关系,因此它知道您可以将Dog*分配给Animal*,并执行适当的转换(在C ++中,这涉及一个名为虚表)。