范围

只能在程序的某些区域内使用 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 );
    

请参见

参考

基本概念