C++ 类变量,其作用域限制为函数

C++ 类变量,其作用域限制为函数,c++,C++,成员函数将被重复调用。 我认为每次为局部变量分配内存都很耗时。 解决方案是在类声明中声明这些变量。 但我不希望它们对同一类的其他函数可见。 有办法做到这一点吗? 尝试使用名称空间,但无效 A类 { int n;//只有函数“One”应该看到“n” 公众: A(void);//默认构造函数 int-One(void);//成员函数 int-Two(void);//成员函数 }; A::A(void)//默认构造函数 { n=7; } int A::One(void)//函数“One” { 返回n;

成员函数将被重复调用。
我认为每次为局部变量分配内存都很耗时。
解决方案是在类声明中声明这些变量。
但我不希望它们对同一类的其他函数可见。
有办法做到这一点吗?
尝试使用名称空间,但无效

A类
{
int n;//只有函数“One”应该看到“n”
公众:
A(void);//默认构造函数
int-One(void);//成员函数
int-Two(void);//成员函数
};
A::A(void)//默认构造函数
{
n=7;
}
int A::One(void)//函数“One”
{
返回n;//声明“n”不会浪费时间
}
int A::Two(void)//函数'Two'
{
int n=7;//必须,没有其他可用的“n”
返回n;
}

分配局部变量并不耗时,它们是在大数据块中分配的调用堆栈的一部分。你打算做的与良好实践相反。好的做法是在尽可能小的范围内声明变量。
此外,不能对同一类中的成员函数隐藏字段

你看到了一个错误的问题

  • 如果您总是希望给定的方法返回给定的值,无论实例和历史值是什么,当然不要为此使用属性
  • 如果属性值取决于实例,请使用(非静态)属性
  • 如果值不依赖于实例,但在执行过程中可以更改,请使用类实例(例如静态)
但我不希望它们对同一类的其他函数可见

仅仅使用可见性是不可能的,类的所有方法(幸运的是)都可以访问类的属性,这不会是一个问题,因为类知道它做什么。当然,属性必须至少受到保护

反正

  • 如果该值不依赖于实例,则可以使用该方法中定义的静态变量
  • 否则,您可以在方法中使用静态定义的映射,其中键是实例,值是期望值,但这会使操作复杂化,因为您至少需要考虑实例的删除。我鼓励你不要做那种加沙工厂

“我想每次为局部变量分配内存都很耗时。”这是真的吗?你测试过了吗?对我来说好像是个问题。这个要求的原因是什么:“但我不希望它们对同一类的其他函数可见。”?然而,这可能是通过继承构造实现的。@user11132556“我认为每次为局部变量分配内存都很耗时。”通常情况下不是这样。在分配局部变量时,在您的应用程序实际遇到性能瓶颈之前,请不要过早地进行这种微观优化。如果是这样的话,这可能是那些构造函数的一个问题,但实际上不是变量表示本身的分配问题。好问题。我没有考过,但现在考了。事实上,为局部变量分配内存确实需要时间。但是后续的函数操作可能需要更多的时间。令人惊讶的是(对我来说),在一些测试中,重复的局部变量声明比函数声明外的声明运行得更快。也许读取存储在局部变量中的值需要更少的时间,我不知道。@user11132556我想你还没有在启用优化的版本中测试过它吗?测试调试构建几乎是无用的。“这是不可能的”嗯,可能会引入继承级间接寻址。“因为类知道它做什么”,至少它的开发人员/维护人员应该做什么-D…@πνταῥεῖ 可见性的存在说明开发商不知道他们在做什么(笑话)^“我鼓励你不要做那种天然气工厂”你让我今天过得很开心,这值得我们投票