c++中的作用域(分别举例代码说明)

在C++中,“作用域(Scope)”是指程序中变量、函数或对象的可见性和生命周期范围。区分作用域是理解程序行为的关键。作用域可分为6种分别是语句块作用域,函数作用域,全局命名空间作用域,函数原型作用域,类作用域,命名空间作用域。(参考的是第九版c++大学教程中的分类)

1. 语句块作用域(Block Scope)

特点

  • 变量在 {} 内定义。

  • 只在定义它的块内可见。

  • 生命周期从进入块开始,到退出块结束。

代码示例

#include <iostream>
using namespace std;

int main() {
    int x = 10;  // x 在 main 函数内可见
    {
        int y = 20;  // y 只在这个块内可见
        cout << "Block Scope y: " << y << endl;  // 输出 20
    }
    // cout << y << endl;  // 错误:y 在此处不可见
    cout << "Function Scope x: " << x << endl;  // 输出 10
    return 0;
}

区分方法:

1.变量定义在 {} 内部,且只在当前块内有效。

2.离开块后,变量会被销毁。

2. 函数作用域(Function Scope)

特点

1.变量在函数内定义。

2.只在定义它的函数内可见。

3.生命周期从函数调用开始,到函数返回结束。

代码示例

#include <iostream>
using namespace std;

void example() {
    int x = 30;  // x 在 example 函数内可见
    cout << "Function Scope x: " << x << endl;  // 输出 30
}

int main() {
    // cout << x << endl;  // 错误:x 在此处不可见
    example();
    return 0;
}

区分方法

1.变量在函数内定义。

2.函数外无法访问函数内变量。

3. 全局命名空间作用域(Global Namespace Scope)

特点

1.变量在所有函数和类外定义。

2.在整个程序中可见。

3.生命周期从程序启动开始,到程序结束结束。

代码示例

#include <iostream>
using namespace std;

int x = 40;  // x 是全局变量

void example() {
    cout << "Global Scope x: " << x << endl;  // 输出 40
}

int main() {
    cout << "Global Scope x: " << x << endl;  // 输出 40
    example();
    return 0;
}

区分方法

1.变量在所有函数和类外定义。

2.整个程序都可以访问。

4. 函数原型作用域(Function Prototype Scope)

特点

1.参数在函数原型中定义。

2.只在函数原型中可见。

3.通常用于声明函数时指定参数类型。

代码示例

#include <iostream>
using namespace std;

void example(int x);  // x 只在函数原型中可见

void example(int x) {
    cout << "Function Prototype Scope x: " << x << endl;  // 输出 50
}

int main() {
    example(50);
    return 0;
}

区分方法

1.参数在函数原型中定义。

2.函数原型外无法访问。

5. 类作用域(Class Scope)

特点

1.成员变量或函数在类中定义。

2.通过类的对象或类名访问。

3.静态成员变量在整个程序中共享。

代码示例

#include <iostream>
using namespace std;

class MyClass {
public:
    static int x;  // x 是类的静态成员变量
    void print() {
        cout << "Class Scope x: " << x << endl;  // 输出 60
    }
};

int MyClass::x = 60;  // 静态成员变量初始化

int main() {
    MyClass obj;
    obj.print();  // 输出 60
    cout << "Class Scope x: " << MyClass::x << endl;  // 输出 60
    return 0;
}

区分方法

1.变量或函数在类中定义。

2.通过类的对象或类名访问。

 

6. 命名空间作用域(Namespace Scope)

特点

1.变量或函数在命名空间中定义。

2.通过命名空间访问。

3.用于避免命名冲突。

代码示例

#include <iostream>
using namespace std;

namespace MyNamespace {
    int x = 70;  // x 在 MyNamespace 中定义
}

int main() {
    cout << "Namespace Scope x: " << MyNamespace::x << endl;  // 输出 70
    return 0;
}

区分方法

1.变量或函数在命名空间中定义。

2.通过命名空间访问。

总结对比

作用域类型定义位置可见范围生命周期访问方式
语句块作用域{} 内块内进入块到退出块直接访问
函数作用域函数内函数内函数调用到函数返回直接访问
全局命名空间作用域所有函数和类外整个程序程序启动到程序结束直接访问
函数原型作用域函数原型中函数原型中
类作用域类中类内对象创建到对象销毁(非静态)通过对象或类名访问
命名空间作用域命名空间中命名空间内程序启动到程序结束通过命名空间访问
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值