我很好奇,在类构造函数中声明的变量范围是什么,它们不是该类的数据成员?
例如,如果构造函数需要迭代int i
,那么在构造函数完成后是否会销毁此变量,或者它是否为程序的全局变量?
答案 0 :(得分:11)
从这个意义上讲,构造函数就像任何其他函数一样 - 任何在里面声明的变量都有通常的范围限制,并且它们肯定会超出范围并在构造函数完成后被销毁。
答案 1 :(得分:6)
与任何其他函数一样,如果它是局部变量,它将在函数末尾被“销毁”。本地范围。
答案 2 :(得分:5)
正如经常发生的那样,你可能会混淆范围和生命周期的概念,所以我会解决这两个问题。
在构造函数中声明的名称的范围与任何本地名称的范围相同(事实上它是构造函数无论如何都没有区别):名称的范围扩展到声明名称的块的末尾(当名称隐藏时,它可以通过声明甚至“更本地化”来实现“漏洞”同名)。
在构造函数中定义的am对象的生命周期由与任何本地定义的对象的生命周期相同的规则控制(事实上它是构造函数没有任何区别):一个对象自动存储持续时间在其范围的末尾被销毁,而具有静态存储持续时间的对象永远存在。
答案 3 :(得分:3)
类构造函数中声明的变量在类构造函数的范围内可用,并且无处可去。
public MyClass() {
int i = 0; // i is only available inside this constructor.
// It can't be used in any other function of this class or any other.
}
答案 4 :(得分:2)
无论函数如何,局部变量在超出范围时都会被销毁。它们不会成为“全球性的”。
答案 5 :(得分:1)
范围可以是静态的(词汇的)也可以是动态的。大多数语言都使用词法范围,这意味着范围由程序的文本决定(例如“在它定义的括号内”),而不是你所写的内容的含义。