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

C++ 成员函数中声明的变量与成员变量相同,c++,C++,想知道这是否有效,以及如何: class sample { int i; int func1() { int i = 0; i++; return i; } } 我问这个问题的原因是因为我有很多成员函数和坏名称约定。它工作正常。函数中名称i的所有用法均指该函数中声明的i。也就是说,函数每次返回1。它工作正常。函数中名称i的所有用法均指该函数中声明的i。也就是说,函数每次都返回1。当您说int i=0时,您正在创建一个名为i的新变量,该变量隐藏类成员。如果要访问类的

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

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

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

它工作正常。函数中名称
i
的所有用法均指该函数中声明的
i
。也就是说,函数每次返回1。

它工作正常。函数中名称
i
的所有用法均指该函数中声明的
i
。也就是说,函数每次都返回1。

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

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

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

this->i
是传入类中所有方法以表示当前实例的常量指针。当然,当您有
静态
成员函数时,它不会传入


首先使用本地声明的
int i
的原因是因为它与
i++
返回i
func1
的主体内,您将引用本地声明的
int i
。要引用类成员,需要使用
this
指针显式引用它:

this->i
是传入类中所有方法以表示当前实例的常量指针。当然,当您有
静态
成员函数时,它不会传入


首先使用本地声明的
int i
的原因是因为它与
i++
返回i
在func1()中i的意图是什么。您想增加函数的外部i还是内部i。如果您希望外部i递增,那么这将不起作用。

在func1()中设置i的目的是什么。您想增加函数的外部i还是内部i。如果您希望外部i递增,那么这将不起作用。

作用域会让事情变得奇怪:

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

示波器会让事情变得奇怪吗

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

cout返回实际上将引用
func1()
中声明的
i
。这都是关于作用域的

范围以
{
开始,以
}
结束。范围内声明的所有变量只有在您停留在该范围内或进入另一个范围时才会定义。因此

{ int i = 0; { int i = 1; { int i = 2; }}}
是完全可能的。如果在其中一个作用域中使用
i
,您将始终引用同一作用域中的
i
。引用更高作用域的
i
更困难


在您的示例中,您仍然可以通过使用
this->i
来引用顶部的
i
,其中
this
是指向您正在使用的对象的指针。还有一些信息(向下滚动一点)。

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

范围以
{
开始,以
}
结束。范围内声明的所有变量只有在您停留在该范围内或进入另一个范围时才会定义。因此

{ int i = 0; { int i = 1; { int i = 2; }}}
是完全可能的。如果在其中一个作用域中使用
i
,您将始终引用同一作用域中的
i
。引用更高作用域的
i
更困难


在您的示例中,您仍然可以通过使用
this->i
来引用顶部的
i
,其中
this
是指向您正在使用的对象的指针。是一些其他信息(向下滚动一点).

范围重要。类范围中的变量
i
与功能范围中的变量不同。范围重要。类范围中的变量
i
与功能范围中的变量不同。