gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:57:22 25 4
gpt4 key购买 nike

我在一个类中有很多重载函数。在这种情况下,我是否应该将 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);
}
}

最佳答案

在选择在何处声明变量时,范围并不是唯一要考虑的因素。变量的生命周期和创建时间同样重要。

当你在一个函数中声明一个变量时,它会在该函数被调用时创建,如果需要的话会多次创建(递归!)。当该函数退出时它会被销毁。 int32_t 等简单类型的情况下,这些创建/销毁对于 CPU 来说是空话。

当您在类中声明它时,对于您创建的每个对象,您只会获得该变量的一个拷贝。如果您的一个函数调用另一个(或它自己),它们将使用相同 变量。您还增加了对象的大小;你的变量即使不被使用也会消耗内存。

因此,底线是:使用不同类型的变量达到它们设计的目的

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

任何其他事情都会导致困惑。

关于c++ - 我应该将在许多函数中使用的变量声明为成员变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36631376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com