初探C++

本文探讨了C++中的引用概念,包括其初始化、特性、使用场景,以及内联函数、auto关键字、基于范围的for循环和指针的空值nullptr。还讨论了传值与传引用的效率和auto在不同情况下的应用。
摘要由CSDN通过智能技术生成

初探C++(2)

6.引用

1.引用的概念

通俗来讲,引用就是取别名的意思,它的符号表示是&,要与C语言中的取地址符号(&)区分开来。

int a=10;
int& b=a;//b就是对a的引用
int& c=a;
int& d=c;

以上便是引用的例子,一个变量可以有多个引用,也就是可以取多个名称,但是对他们取地址,会得到同一个地址。
类型& 引用变量名(引用的对象)=引用实体

2.引用的特性

1.引用在定义时必须初始化。

int a=10;
int& pa;//error 该语句会编译出错

2.一个变量可以有多个引用。
3.引用引用一个实体,便不能再引用其他实体。

3.常引用

不能对变量的权限进行放大,如不能把const给非const

//权限放大  
const int a=10;
//int& b=a;  error 
const int& b=a;

即const不能给非const。

//权限缩小
int c=20;
const int& d=c;
int& e=c;

即非const既可以给非const,也可以给const。
注意:可读可写可以变成只读。
权限的放大缩小适用于指针和引用,赋值不受影响。

4.使用场景

1.做参数

void Swap_cpp(int& a,int& b)
{
int tmp=a;
int a=b;
int b=tmp;
}

2.做返回值

int& Add(int a,int b)
{
static int c=a+b;
return c;
}

注意:如果函数返回时,出了函数作用域,如果返回对象还未还给系统,则可以使用引用返回,如果已经还给系统了,则必须使用传值返回。这也就是在变量c前边加了static的原因。

5.传值、传引用的效率比较

1.传值不管是传参还是返回值,都会产生一个拷贝,而传引用则不会,临时变量具有常性。
2.引用:输出型参数,同时可以提高效率。
3.关于引用返回:一个函数想要引用返回,返回变量出了这个函数的作用域如果还存在,就可以使用引用返回,否则就不建议使用。(联想static)

7.内联函数

1.概念

inline修饰的函数称为内联函数,在编译时,编译器会在调用内联函数的地方对函数进行展开。

inline void Swap(int& x1,int& x2)
{
int tmp=x1;
 x1=x2;
 x2=tmp;
}

在频繁调用Swap函数时,便会展开。

2.特性

1.inline是一种以空间换时间的做法,在代码很长或者有循环递归时不建议使用。
2.inline对于编译器来说只是一个建议,会自动进行优化,并决定是否展开。

8.auto关键字

1.概念

简单来说,auto可以理解为“自动”,使用auto声明的变量编译器会自动的推导出类型。

int a = 10;
auto b = a;  //b为int类型
auto c = 'a';//c为char类型

注意使用auto定义变量时,必须进行初始化。

2.使用场景

1.auto和指针与引用结合起来使用。
用auto声明指针类型时auto和auto*没有区别,但是声明引用必须加&。

int x=10;
auto a=&x;
auto* b=&x;
auto& c=x;

2.在同一行定义多个变量。
当一行中定义多个变量时,变量类型要相同,因为编译器实际只对第一个类型进行推导。

3.auto不能作为函数的参数。
4.auto不能直接用来声明数组。

9.基于范围的for循环

1.语法

int a[]={1,2,3,4,5};
for(auto& e:a)
    e*=2;
for(auto e:a)
   cout<<e<<" ";

范围for循环后的括号由冒号分成两个部分:
1.范围内用于迭代的变量 如e。
2.被迭代的范围 a数组内。

2.使用条件

1.迭代的范围必须是确定的。

10.指针空值nullptr

在指针中NULL表示空指针,实际上NULL会被定义为一个字面常量0。
在C++中可以使用nullptr关键字来定义空指针。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值