您的位置:首页 > 房产 > 家装 > C++名字空间

C++名字空间

2024/12/23 9:33:24 来源:https://blog.csdn.net/weixin_74239923/article/details/139521777  浏览:    关键词:C++名字空间

文章目录

  • 为什么需要名字空间
  • 什么是名字空间
  • 怎样用名字空间
  • 无名名字空间
  • 名字空间嵌套与名字空间别名

为什么需要名字空间

  • 划分逻辑单元
  • 避免名字冲突

什么是名字空间

  • 名字定义空间
//名字空间定义
namespace abc {float m_balance = 0.0;void save(float balance) {m_balance += balance;}void draw(float balance) {m_balance -= balance;}void print() {qDebug() << "余额是:" << m_balance;}
}int main(int argc, char *argv[])
{
//使用作用域限定符调用作用域的方法abc::save(15000.00);abc::draw(1.00);abc::print();}

输出:在这里插入图片描述

  • 名字空间合并
    通过使用using关键字将一个名字空间的所有内容合并到另一个名字空间,或者使用using namespace将特定名字空间中的名字引入到当前作用域
namespace ns1 {int a = 10;int b = 20;
}namespace ns2 {int c = 30;int d = 40;
}// 将ns2中的所有内容合并到ns1
namespace ns1 {using namespace ns2;
}// 或者,将特定的名称引入到全局作用域
using ns1::a;
using ns1::b;
using ns1::c;
using ns1::d;
  • 声明定义分开
    。声明告诉编译器get函数的存在和它的参数类型、返回类型,但具体的实现细节(即函数体)还没有给出。而定义则提供了函数的完整实现
//名字空间定义
namespace abc {float m_balance = 0.0;//声明void get();
}//定义
void abc::get()
{qDebug() << "余额是:" << m_balance;
}int main(int argc, char *argv[])
{
//使用
abc::get();}

怎样用名字空间

  • 作用域限定符
//使用作用域限定符调用作用域的方法abc::save(15000.00);abc::draw(1.00);abc::print();
  • 名字空间指令
//名字空间指令
//使用后,在声明后对abc名字空间的名称都是公开可见,可以直接访问
using namespace abc;
//不需要再使用作用域限定符
save(15000.00); 
  • 名字空间声明
//名字空间指令
//使用后,在指令后面的save方法都是可见,可以直接用
using abc::save;
//不需要再使用作用域限定符
save(15000.00); 
//错误,没有指定作用域
draw(1.00);

无名名字空间

  • 不属于任何有名名字空间的标识符,隶属于无名命名空间
  • 无名命名空间的成员,直接通过"::"访问
//无名名字空间
float m_balance = 1200.00;//名字空间定义
namespace abc {
void print() {qDebug() << "余额是:" << m_balance;//访问无名名字空间的数据需要加上作用域限定符qDebug() << "无名名字空间余额是:" << ::m_balance;}
}int main(int argc, char *argv[])
{
//调用方法
abc::print();}

输出
在这里插入图片描述

名字空间嵌套与名字空间别名

  • 内层标识符隐藏外层同名标识符
  • 嵌套的名字空间需要逐层分解
  • 可通过名字空间别名简化书写
namespace a1 {//都是num但是不会冲突,因为内层标识符隐藏外层标识符int num = 1000;namespace a2 {int num = 2000;namespace a3 {int num = 3000;};}}int main(int argc, char *argv[])
{//嵌套的名字空间需要逐层分解qDebug() << "第一层名字空间:" << a1::num;qDebug() << "第二层名字空间:" << a1::a2::num;qDebug() << "第三层名字空间:" << a1::a2::a3::num;//名字空间别名namespace num3 = a1::a2::a3;qDebug() << "简化书写的名字空间:" << a1::a2::a3::num;}

输出
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com