在成员函数中声明的变量与成员变量相同

时间:2013-03-19 18:37:26

标签: c++

想知道这是否会奏效,以及如何:

class sample
{
 int i;
 int func1()
  {
   int i = 0;
   i++;
   return i;
  }
}

我问的原因是因为我有很多成员函数和坏名称约定。

7 个答案:

答案 0 :(得分:2)

当您说int i = 0时,您正在创建一个名为i的新变量,该变量会隐藏该类成员。如果您想访问班级i,可以执行this->i。但通常最好不要在一开始就造成这种混乱。

答案 1 :(得分:1)

func1的正文中,您将引用本地声明的int i。要引用类成员,需要使用this指针显式引用它:

this->i

this是一个const指针,传入类中的所有方法以表示当前实例。当然,当你有一个static成员函数时,它不会传入。

首先使用本地声明int i的原因是因为它与i++return i的范围相同。

答案 2 :(得分:0)

func1内的变量是指int i = 0;(最近的i)。

在C ++中,首先将使用相同/近似范围的相同名称变量。

答案 3 :(得分:0)

工作正常。函数内部名称i的所有使用都是指该函数内部声明的i。也就是说,该函数每次都会返回1。

答案 4 :(得分:0)

你对func1()内部的意图是什么?你想增加函数内部的i或i。如果你想让外面的i递增,那么这将不起作用。

答案 5 :(得分:0)

范围变得奇怪:

int func1()
{
    int i = 0;
    i++;
    { //1
        int i = 41;
        i++;
    }
    { //2
        int j = i + 1;
        cout << j << endl // this prints 2
    }
    return i;
}

在范围中使用变量时的规则是,它始终首先引用最本地的范围,然后逐步运行。因此,在您的示例中,函数中的i将不会引用类中的i

答案 6 :(得分:0)

实际上,返回将引用i中声明的func1()。这都是关于范围的。

范围以{开头,以}结尾。在范围内声明的所有变量只会在您保持在范围内或进入另一个范围内时定义。因此

{ int i = 0; { int i = 1; { int i = 2; }}}

完全可能。如果您在其中一个范围内使用i,则始终会引用同一范围内的i。引用更高范围的i更加困难。

在您的示例中,您仍然可以使用i来引用顶部this->i,其中this是指向您正在使用的对象的指针。 Here是更多信息(向下滚动)。