作用域(scope)
作用域在许多程序设计语言中非常重要。
通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。
对于对象而言(其他也是一样的),在main函数中,对象的作用域为他所在的最近的一对花括号内。在后花括号处析构函数被调用;全局的对象的作用域为声明之后的整个文件,析构函数在最后被调用。另外,临时产生的对象在使用完后立即会被析构。下面是一个简单的例子。
#include
using namespace std;
class X {
public:
X() {
cout << X::X()\n;
}
~X() {
cout << X::~X()\n;
}
};
X f1(X x1) //完全不使用引用
{
cout << f1(X f)\n;
return x1;
}
X& f2(X& x2) //完全使用引用
{
cout << f2(X f)\n;
return x2;
}
X Globle_X; //全局版本
int main()
{
cout << --------\n;
{
X Local_X; //局部版本
cout << --------\n;
}
cout << --------\n;
X Normal_X;
f1(Normal_X);
cout << --------\n;
f2(Normal_X);
cout << --------\n;
}
程序执行结果为:
X::X()
--------
X::X()
--------
X::~X()
--------
X::X()
f1(X f)
X::~X()
X::~X()
--------
f2(X f)
--------
X::~X()
大家对照着就能看出来了……