在成员函数中声明的变量与成员变量相同
variable declared in member function is same as member variable
不知道这是否会工作,以及如何:
class sample
{
int i;
int func1()
{
int i = 0;
i++;
return i;
}
}
我问这个问题是因为我有很多成员函数和坏名字约定。
当您说int i = 0
时,您正在创建一个名为i
的新变量,该变量隐藏了类成员。如果您想访问类的i
,您可以执行this->i
。但通常最好一开始就不要引起这种混淆。
在func1
的体中,您将引用本地声明的int i
。为了引用类成员,需要使用this
指针显式地引用它:
this->i
this
是传递给类中所有方法的const指针,用于表示当前实例。当然,当你有static
成员函数时,它不会传入。
首先使用本地声明的int i
的原因是因为它与i++
和return 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;
}
在作用域中使用变量的规则是,它总是首先引用最局部的作用域,然后向上处理。因此,在您的示例中,函数中的i
将不会引用类中的i
。
效果很好。在函数内部对i
名称的所有使用都引用该函数内部声明的i
。也就是说,函数每次都会返回1。
在func1()中使用i的目的是什么?你是想增加外部的i还是函数内部的i。如果你想让外部的i递增,那么这是行不通的
返回值实际上是指在func1()
中声明的i
。都是关于作用域的
作用域以{
开始,以}
结束。在一个作用域内声明的所有变量,只有当您留在该作用域内或进入另一个作用域时才会被定义。因此
{ int i = 0; { int i = 1; { int i = 2; }}}
是完全可能的。如果在其中一个作用域中使用i
,则将始终引用同一作用域中的i
。引用更高作用域的i
比较困难。
在你的例子中,你仍然可以通过使用this->i
来引用顶部的i
,其中this
是指向你正在使用的对象的指针。这里有一些更多的信息(向下滚动一点)
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组