namespace & 全局变量&局部变量

认识了一个作用域运算符::

若直接使用,则用于访问全局变量

int a=1;

int main()

{

        int a=10;

        cout<<a<<::a<<endl;//输出结果为101

        return 0;

}

为了对多个变量名相同,但实际用法不同的变量进行封装,引入了namespace

用namespace可以将多个空间中的相同变量区分开

namespace A

{

        int a=1;

}

namespace B

{

        int a=10;

}

//引用时,可以用A::a和B::a的方式进行调用

此外,namespace还可以封装函数(方法)

 namespace A

{

        int a=1;

       /*void func()

        {

                cout<<a<<endl;

        }

        在命名空间内定义*/

        void func();//在命名空间外定义,但需记得在命名空间内声明

}

void A::func()//记得标注A::表示所写的函数是A中的函数

{

        cout<<a<<endl;

}

当出现全局变量,局部变量,静态变量(namespace中的变量)时,优先级:局部>静态=全局 

理解例子:

    int a=1000;//全局变量
namespace Longname{
    int a=100;//静态变量
    void func();
    
}
void Longname::func()
    {
        cout<<"hello"<<endl;
    }
void test01()
{
    using namespace Longname;
    int a=10;//test01函数中的局部变量

        //若写using Longname::a;则等价于使用局部变量,则会与a=10;矛盾
    
    cout<<"a="<<a<<endl;
}
int main()
{

      int a=1;//main中的局部变量
    test01();
    return 0;
}

在这个例子中,main函数调用了test01,main中的a=1作用域无法被test01获取

在test01中,优先获取局部变量a=10,若其注释掉的话程序会报错。因为静态变量和全局变量都能被test01获取,且优先级一样高,故无法运行。

【tip:静态变量与全局变量的区别——当多个程序源文件在同一个项目中时,静态变量只能被该源文件访问,而全局变量可以被任意文件访问。】

在函数中,若想直接使用某个命名空间的元素,写上using namespace A即可。(如上面的例子,当出现局部变量与命名空间的变量重名时,优先使用局部变量,调用函数也同理)

当使用using遇到函数重载时,声明using namespace A::func;即可。后续对func()的调用取决于你传参的形式。

### 将C++中的局部变量转换为全局变量C++中,要将局部变量转换为全局变量,可以遵循特定的方法来调整代码结构。通常情况下,局部变量仅在其定义的作用域内可见,而全局变量在整个程序范围内都可访问。 #### 定义全局变量的位置 为了使某个变量成为全局变量,应当将其声明放在所有函数之外,在文件的顶部位置声明该变量即可让其变为全局变量[^1]: ```cpp // 声明一个全局整型变量g_value int g_value; void functionA() { // 函数内部可以直接使用g_value } int main() { // 主函数也可以直接操作g_value } ``` #### 修改现有局部变量全局变量的过程 如果已经存在一个局部变量并希望将其更改为全局变量,则需执行以下更改: - 移动原始局部变量的声明到任何函数外部; - 确保新声明位于源文件的最上方部分以便于其他函数能够识别此变量; 例如,假设有一个名为`localVar`的局部变量存在于某函数之中: ```cpp #include &lt;iostream&gt; using namespace std; void originalFunction() { int localVar = 42; // 局部变量 cout &lt;&lt; &quot;Local Variable Value: &quot; &lt;&lt; localVar; } int main(){ originalFunction(); return 0; } ``` 现在想要把`localVar`变成全局变量,那么应该这样做: ```cpp #include &lt;iostream&gt; using namespace std; // 把原来的局部变量移到这里作为全局变量 int localVar = 42; void modifiedFunction() { // 可以直接在这里修改或读取globalVar cout &lt;&lt; &quot;Global Variable Value: &quot; &lt;&lt; localVar; } int main(){ modifiedFunction(); return 0; } ``` 需要注意的是,当多个函数共享同一个全局变量时可能会引发潜在的竞争条件或其他并发问题。因此建议谨慎使用全局变量,并考虑采用更好的设计模式如单例模式或者依赖注入等方式替代简单粗暴地创建大量全局状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值