设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间01 现在时间01 缓存数据 当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

当你走完一段之后回头看,你会发现,那些真正能被记得的事真的是没有多少,真正无法忘记的人屈指可数,真正有趣的日子不过是那么一些,而真正需要害怕的也是寥寥无几。

查看: 1417|回复: 3

C++命名空间和缺省参数介绍

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:233
  • 打卡月天数:0
  • 打卡总奖励:3508
  • 最近打卡:2025-10-27 06:31:21
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
391
主题
361
精华
0
金钱
4701
积分
821
注册时间
2023-1-5
最后登录
2025-10-27

发表于 2023-2-13 14:27:13 | 显示全部楼层 |阅读模式
一、命名空间

为什么引入命名空间

在C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,
  1. namespace
复制代码
关键字的出现就是针对这种问题的。
  1.     int a = 10;
  2.     
  3.     int main(void)
  4.     {
  5.         int a = 10;
  6.         return 0;
  7.     }
复制代码
这里一个a是全局变量,一个a是局部变量。可以编译通过。
152735xaiopv2qwbh2obhy.png
  1.         int a = 10;
  2.         int a = 20;
  3.        
  4.         int main(void)
  5.         {
  6.                 int a = 10;
  7.                 return 0;
  8.         }
复制代码
当有两个全局变量a时,命名冲突了,编译不过。
152735wxm4xwt40j7j2jm0.png

举例说明,假如1班和2班都有名字叫张三的同学,当一班和二班站在一起时,老师叫张三就会出现歧义,不知道叫的是一班的还是二班的。但是如果老师叫一班的张三或二班的张三,就不会出现歧义和错误。这里的一班和二班就相当于命名空间。
命名空间定义

定义命名空间,需要使用到
  1. namespace
复制代码
关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
  1.     namespace bc    //bc为命名空间的名字
  2.     {
  3.         //命名空间的成员
  4.         int a = 100;    
  5.         int ADD(int a, int b)
  6.         {
  7.             return a + b;
  8.         }
  9.     }
复制代码
命名空间中的内容,可以是类、变量、函数、模板和其它命名空间。
命名空间可以嵌套
  1.     namespace FPX
  2.     {
  3.         int a = 5;
  4.         namespace doinb
  5.         {
  6.             int b = 5;
  7.             void Champion()
  8.             {
  9.                 cout << "FPX2021WIN" << endl;         
  10.             }
  11.         }
  12.     }
复制代码
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。
同时也意味着在名字相同的命名空间中的命名是不能冲突的。
使用命名空间

有以下命名空间:
  
  1.  namespace bc
  2.     {
  3.         int m = 10;
  4.         int n = 20;
  5.     
  6.         int Add(int a, int b)
  7.         {
  8.             return a + b;
  9.         }
  10.     
  11.         int Max(int a, int b)
  12.         {
  13.             return a > b ? a : b;
  14.         }
  15.     }
复制代码
1.使用using声明将命名空间全部展开到全局。
  1.     using namespace bc;
复制代码
这样命名空间中的内容就可以像全局一样直接使用。
  1.     int a = 10;
  2.     int b = 20;
  3.     cout << Add(a, b) << endl;
  4.     cout << Max(a, b) << endl;
复制代码
这种方法的优点是使用起来非常方便,缺点是把自己的定义都暴露出去了,导致命名污染。
2.访问命名空间的内容时,指定命名空间。
  1.     int a = 10;
  2.     int b = 20;
  3.     cout << bc::Add(a, b) << endl;
  4.     cout << bc::Max(a, b) << endl;
复制代码
::为作用域运算符,前缀bc::指出函数Add和Max是定义在名为bc的命名空间中的。通过作用域运算符(::)来指出我们想使用定义在命名空间bc中的名字Add和Max。
这种方法的优点是不存在命名污染,缺点是用起来太麻烦,每个都要去指定命名空间。
3.可以把常用的展开
比如Add函数是常用的:
  1.     using bc::Add;
复制代码
以后使用Add函数时就不需要指定命名空间。
这种方法不会造成大面积的命名污染,把常用的展开,使用时也很方便。
位于头文件的代码一般来说不应该使用
  1. using
复制代码
声明。因为头文件的内容会拷贝到所有引用它的文件中,如果头文件里有某个using声明,那么每个使用了该头文件的文件就都会有这个声明。对于某些程序来说,由于不经意间包含了一些名字,反而可能产生名字冲突。
标准命名空间

C++ 引入了命名空间的概念,计划重新编写库,将类、函数、宏等都统一纳入一个命名空间,这个命名空间的名字就是std。std 是
  1. standard
复制代码
的缩写,意思是“标准命名空间”。
二、缺省参数

缺省参数概念

缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。
  
  1.  void TestFunc(int a = 0)    //参数缺省值
  2.     {
  3.         cout << a << endl;
  4.     }
  5.     
  6.     int main(void)
  7.     {
  8.         TestFunc();        //没有传参数,使用参数的默认值
  9.         TestFunc(10);    //传参数时,使用指定的参数
  10.         return 0;
  11.     }
复制代码
152736xiv9sc4pi49s8d9f.png

三、缺省参数分类

全缺省参数

所有的参数都给出缺省值:
  1.     void TestFunc(int a = 10, int b = 20, int c = 30)
  2.     {
  3.         cout << "a = " << a << endl;
  4.         cout << "b = " << b << endl;
  5.         cout << "c = " << c << endl;
  6.     }
复制代码
半缺省参数

部分参数给出缺省值:
  1.     void TestFunc(int a, int b = 10, int c = 20)
  2.     {
  3.         cout << "a = " << a << endl;
  4.         cout << "b = " << b << endl;
  5.         cout << "c = " << c << endl;
  6.     }
复制代码
  1. <strong>需要注意的是:</strong>
  2. 半缺省参数必须从右往左依次来给出,不能间隔着给。缺省参数不能在函数声明和定义中同时出现。缺省值必须是常量或者全局变量。
复制代码
到此这篇关于C++命名空间和缺省参数介绍的文章就介绍到这了,更多相关C++命名空间和缺省参数内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
18
积分
16
注册时间
2022-12-25
最后登录
2022-12-25

发表于 2023-3-7 00:37:22 | 显示全部楼层
感谢大大分享~~~~~~~~
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
11
积分
2
注册时间
2025-1-17
最后登录
2025-1-17

发表于 2025-10-12 04:17:10 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
19
积分
18
注册时间
2022-12-29
最后登录
2022-12-29

发表于 2025-10-12 11:04:43 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼
4楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表