C++入门知识(命名空间 , 缺省参数 , 引用) --- 1

目录

一.命名空间

1.为什要有命名空间

2.命名空间的定义

3.命名空间在一些使用上的注意事项

 二.缺省参数

1.概念

2.分类

注意:

三.引用

1.概念

2.引用特性

3. 常引用    

4. 使用引用返回

5.引用和指针的区别

6.面试题: 引用和指针的不同点 (从使用角度看)


一.命名空间

1.为什要有命名空间

C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作 用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字 污染namespace关键字的出现就是针对这种问题的。

2.命名空间的定义

1. 普通的命名空间
namespace N1    N1为命名空间的名称
{

  命名空间中的内容,既可以定义变量,也可以定义函数

 int a;
 int Add(int left, int right)
 {
 return left + right;
 }
}

2. 命名空间可以嵌套
namespace N2
{
 int a;
 int b;
 int Add(int left, int right)
 {
 return left + right;
 }
 
 namespace N3
 {
 int c;
 int d;
 int Sub(int left, int right)
 {
 return left - right;
 }

  这里可以继续嵌套

 }

}

3.命名空间在一些使用上的注意事项

c++库为了防止命名冲突,把自己库里面的东西都定义在一个std的命名空间中要使用标准库中的东西,有三种方式


 1、指定命名空间 -> 麻烦,每个地方要用都要指定,但那时他是最规范的方式
   std::cout << "hello" << std::end;


 2、把std整个展开,相当于库里面的东西都到全局域了  
 看起来方便了,如果我们自己定义的东西跟库冲突了就没办法解决了。
一夜回到解放前,所以规范的工程项目中是不推荐这种方式的。  日常练习就可以用
using namespace std;

 3、对部分常用的库里面的东西展开 -> 针对1和2折中方案,项目中也会经常用
  using std::cout;
  using std::endl;

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

 二.缺省参数

1.概念

缺省参数是 声明或定义函数时 为函数的 参数指定一个默认值 。在调用该函数时,如果没有指定实参则采用该 默认值,否则使用指定的实参。

2.分类

  • 全缺省参数
void TestFunc ( int a = 10 , int b = 20 , int c = 30 )
{
cout << "a = " << a << endl ;
cout << "b = " << b << endl ;
cout << "c = " << c << endl ;
}
  • 半缺省参数

void TestFunc ( int a , int b = 10 , int c = 20 )
{
cout << "a = " << a << endl ;
cout << "b = " << b << endl ;
cout << "c = " << c << endl ;
}

注意:

1. 半缺省参数必须从右往左依次来给出,不能间隔着给
2. 缺省参数不能在函数声明和定义中同时出现
//a.h
void TestFunc ( int a = 10 );
// a.c
void TestFunc ( int a = 20 )
{}
// 注意:如果生命与定义位置同时出现,恰巧两个位置提供的值不同,那编译器就无法确定到底该用那 个缺省值。
3. 缺省值必须是常量或者全局变量
4. C语言不支持(编译器不支持)

         

        

三.引用

1.概念

引用不是新定义一个变量,而是给已存在变量取了一个别名, 编译器不会为引用变量开辟内存空间,它和它 引用的变量共用同一块内存空间。

2.引用特性

1. 引用在定义时必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体

         

3. 常引用     

        

4. 使用引用返回

 了解一些函数栈帧的创建和销毁 , 更好的理解传值和传引用的区别。

5.引用和指针的区别

①在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间

②我们来看下引用和指针的汇编代码对比:

6.面试题: 引用和指针的不同点 (从使用角度看)

1. 引用 在定义时 必须初始化 ,指针没有要求
2. 引用 在初始化时引用一个实体后,就 不能再引用其他实体 ,而指针可以在任何时候指向任何一个同类型 实体
3. 没有 NULL 引用 ,但有 NULL 指针
4. 在sizeof中含义不同 引用 结果为 引用类型的大小 ,但 指针 始终是 地址空间所占字节个数 (32 位平台下占 4个字节 )
5. 引用自加即引用的实体增加 1 ,指针自加即指针向后偏移一个类型的大小
6. 有多级指针,但是没有多级引用
7. 访问实体方式不同, 指针需要显式解引用,引用编译器自己处理
8. 引用比指针使用起来相对更安全

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值