我应该将许多函数中使用的变量声明为成员变量吗?

bob*_*bay 3 c++

我在课堂上有很多重载的功能.在这种情况下,我应该将int32_t数据声明为类的成员变量,所以我不是在每个函数中反复声明它吗?Fill函数总是通过引用设置一个值,所以我认为我不应该每次都在每个函数中声明它.

这里没有列出大约20多个这些功能:

void TransmitInfo(TypeA &dp, Id &tc)
{
    //do lots of other work here
    int32_t data;
    while (dp.Fill(data))  //Fill accepts a reference variable, "data" gets populated
    {
        Transmit(tc, data);  
    }
}

void TransmitInfo(TypeB &dp, Id &tc)
{
    //do lots of other work here
    int32_t data;
    while (dp.Fill(data))
    {
        Transmit(tc, data);  
    }
}

void TransmitInfo(TypeC &dp, Id &tc)
{
    //do lots of other work here
    int32_t data;
    while (dp.Fill(data))
    {
        Transmit(tc, data);  
    }
}
Run Code Online (Sandbox Code Playgroud)

cma*_*ter 5

在选择声明变量的位置时,范围不是唯一要考虑的因素.同样重要的是变量的生命周期以及变量的创建时间.

在函数内部声明变量时,无论何时调用该函数,都会创建它,如果需要,则会多次(递归!).当函数退出时它就被破坏了.在简单类型的情况下,这些创建/破坏是CPU的noopsint32_t.

在类中声明它时,每个创建的对象只能获得一个变量副本.如果你的一个函数调用另一个(或它自己),它们都将使用相同的变量.您还可以增加对象的大小; 即使没有使用,你的变量也会占用内存.

因此,底线是:将不同类型的变量用于它们的目的.

  • 如果函数在运行时需要记住某些东西,那么它就是一个函数变量.
  • 如果函数需要在其调用中记住某些内容,那么它就是一个static函数变量.
  • 如果一个对象需要在其成员调用中记住某些东西,那么它就是一个成员变量.
  • 如果一个类需要记住所有对象中的某些东西,那么它就是一个static类变量.

其他任何事都会导致混乱.