一.namespace

namespace是c++中的一个关键字,在c++中,一个程序会包含很多个变量,类,函数,如果这些变量,类,函数的名称都存在于全局作用域中,可能会导致很多命名冲突,namespace就是为了解决这一问题的。

定义一个命名空间需要namespace关键字,在关键字后跟命名空间的名字,然后跟一组{},{}中可以定义,变量,函数,类型等等。

命名空间只能定义在全局中,他还可以嵌套定义,当一个程序中多文件中存在同一名称的命名空间,会认为他们是同一命名空间,不会产生冲突。

当编译一个程序时,查找一个变量的声明和定义时,默认只会在全局或局部查找,不会到命名空间查找。

所以我们使用命名空间的方法有3种

1.指定命名空间的使用,使用::访问命名空间中的         成员

 2.使用using namespace  展开了命名空间的全部成员

在 using namespace std  后可以直接写cout << "hello" << endl;但不推荐在大型项目或者头文件中这样写,容易命名冲突。

3.使用using单独展开某个成员

 这样只引入需要的名字,比 using namespace     std; 更安全。

二.C++中的输入和输出

  1.输出cout

 输出:Hello world

2.输入cin

输入:18  输出:18

3.<<  和   >> 

<< 是输出运算符

>> 是输入运算符

本质上是运算符重载

可以理解为

cout << 10;

是数据流向屏幕。

cin >> x;

是数据从键盘流入变量。

4.连续输出和输入

cout << "年龄:" << 18 << endl;

输出结果:年龄:18

int a, b;

cin >> a >> b;

输入: 10 20

结果:a=10,b=20

5.endl

endl是换行和强制刷新缓冲区。

cout << "hello\n";

只换行,这样写效率更高,大型程序更推荐\n。

三.缺省参数

1.缺省参数的定义

缺省参数分为全缺省和半缺省参数,缺省参数是函数在声明和定义时为函数的参数提供一个缺省值,通俗来说就是函数在被调用时如果没有提供指定参数就采用缺省值,如果提供了参数就采用提供的参数。

输出:10 

           20 

2.全缺省参数

全缺省函数就是函数的所有参数全部使用缺省值,也就是默认值

输出:

3.半缺省参数数

只有部分参数采用默认值

输出:1 10

           1  2

4.  缺省参数的规则

1. 默认参数必须从右往左连续给

                                                                        正确:

错误:

                

中间必须连续赋值不能断开

2. 调用时从左向右传参

3.缺省参数一般写在函数声明中      

正确:

错误:

四.函数重载

在同一个作用域中,允许多个函数名字相同,但参数不同。

编译器会根据你传入的参数:

  • 参数个数
  • 参数类型
  • 参数顺序

自动选择对应的函数。

1.函数重载的条件

参数个数不同

输出:

    一个参数

    两个参数

参数类型不同

输出:

          int
          double

参数顺序不同

2.不能构成重载的情况

 返回值不同不算重载

调用时编译器无法判断。

参数名不同也不算重载

2.函数重载的原理

C++编译器会根据参数生成不同函数名。

编译后可能变成:

五.引用

1.引⽤的概念和定义

数据类型 &引用名 = 变量名;

输出:10

           10

相当于b就是a的别名

2.引用的特性

1.引用必须初始化



2.引用一旦绑定不能更改

这里不是更换绑定,而是把 b 的值赋给 a

                       

输出:20

3.⼀个变量可以有多个引⽤

3.引用的使用场景

1. 作为函数参数

这是引用最重要的用途。

普通传值

调用后原值不会变。

因为是拷贝。

引用传参

交换成功

引用的好处:

     不会拷贝数据

     效率高

     可以直接修改原数据

2.作为函数返回值

错误例子:

原因:

a 是局部变量
函数结束后被销毁
引用变成野引用

六.const引用

1.基本写法

不能通过 r 修改 a

2.const引用的作用

1. 接收常量

普通引用无法接收常量

但const引用可以

编译器会临时创建变量。

2. 减少拷贝

传值就会发生拷贝

这里会发生值拷贝,相当于

编译器会重新创建一个新的 string 对象,把 str 的内容复制给 s

拷贝的代价很大

对于int,char,double拷贝代价很小,但对于string,vector,类对象,大数组

内部可能有:动态内存,大量数据

拷贝时:

会重新申请内存
复制字符

所以会:浪费时间,浪费空间

引用在调用时并不会创建新的对象

s 只是 str 的别名,并不会创建新的 string 对象,

相当于s 直接引用 str。

七.引用与指针的区别

引用指针
必须初始化可以不初始化
不能改绑定可以改指向
使用更方便需要解引用
更安全容易空指针
本质类似指针真正的地址变量

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐