范围
只能在程序的某些区域内使用 C++ 名称。 此区域称为名称的“范围”。 范围决定一个不表示静态范围的对象的名称的“生存期”。 在以下情况下,范围还可决定名称的可见性:调用类构造函数或析构函数时,或初始化范围的局部变量时。(有关详细信息,请参阅构造函数和析构函数。)有五种范围:
**局部范围 **块中声明的名称仅在该块中以及由它封闭的块中是可访问的,并且仅在声明点后可访问。 函数的最外层块的范围中的函数形参的名称具有局部范围,就像已在包含函数主体的块中声明了它们一样。 考虑以下代码片断:
{ int i; }
由于 i 的声明位于包含在大括号内的块中,因此,i 具有局部范围且绝对不可访问,因为右大括号之前没有代码访问它。
**函数范围 **标签是具有函数范围的唯一名称。 它们可以在函数内的任意位置使用,但在函数外部是不可访问的。
**文件范围 **在所有模块或类的外部声明的任何名称都具有文件范围。 它在其声明后的翻译单元中的任意位置都是可访问的。 不声明静态对象的带文件范围的名称通常称为全局名称。
在 C++ 中,文件范围也称为命名空间范围。
类范围 类成员的名称具有类范围。 只能通过在对象上使用成员选择运算符(. 或 –>)或指向成员的指针运算符(.* 或 –>*)或使用执行该类的对象的指针才能访问类成员函数;非静态成员数据被视为该类的对象的本地数据。 考虑下列类声明:
class Point { int x; int y; };
类成员 x 和 y 被认为在类 Point 的范围内。
**原型范围 **函数原型中声明的名称仅在原型的末尾可见。 以下原型声明了三个名称(strDestination、numberOfElements 和 strSource);这些名称超出了原型末尾的范围:
errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );