【C++对于C语言的扩充】:auto关键字、范围for以及nullptr

请添加图片描述

🚀auto关键字(C++11)

✈️auto介绍

auto关键字在C++11标准之前基本被程序猿们忽略,因为在C++11标准之前auto仅在局部变量声明时使用,用来指定变量的存储类型,与register的功能类似。

例如,在C++98中:

auto int x;//这是合法的,但并没有什么意义

这里的autoint一起使用表明x是一个自动存储的局部变量,但这是默认行为,所以auto几乎没有作用。

不过在C++11标准之后,auto作为能自动推导变量类型的关键字,极大方便了编程,提高了编程的灵活性。

//获取vector<int>对象的迭代器
vector<int> a;
vector<int>::iterator it = a.begin();//这么写很麻烦
auto it = a.begin();//这么写就很爽

注意:auto关键字声明的变量必须在声明时初始化,变量的类型将在编译过程中由编译器推导

✈️auto的使用细则

cout << typeid(x).name() << endl //可以打印x的类型
  • auto在声明指针时autoauto*没有区别,但是在声明引用时必须加上&

    int x = 1;
    auto a = &x;
    auto* b = &x;
    auto& c = x;
    cout << typeid(a).name() << endl;
    cout << typeid(b).name() << endl;
    cout << typeid(c).name() << endl;
    

    输出:

    int*
    int*
    int&
    
  • auto在同一行声明多个变量这些变量必须是相同类型

    auto a = 1,b = 3;//符合规则
    auto c = 4,d = 6.0;//这么写编译器会报错
    

✈️auto不能使用的场景

  • auto不能作为函数参数的类型使用

    //下面这样写,编译不会通过
    void test(auto a)
    {}
    
  • auto不能用来声明数组

    int a[] = {1, 2, 3};
    auto b[] = {4, 5, 6};//不能这么用
    

在C++14标准中auto可以作为函数的返回类型

🚀范围for(C++11)

✈️范围for介绍

对于一个有范围的集合,由程序员来说明范围是多余的,还容易出错,于是在C++11中引入了基于范围的for循环

for循环后的括号由:分为两部分,第一部分为用于迭代的变量,第二部分为迭代的范围

int a[5] = {0, 1, 2, 3, 4};
for(int i = 0;i < 5; ++i){
	cout << a[i] << endl;
}
for(int e : a){
	cout << e << endl;
}

上面这两种for循环等价,上面的范围for循环中的e会依次拿到数组a中的每一个元素。

**注意:**范围for同样可以continuebreak,与普通的for循环一致。

✈️范围for的使用条件

  • 对于原生数组可以直接使用范围for循环,范围是整个数组元素
  • 对于而言,必须实现begin()end()方法,才能使用范围for循环
    • 对于begin()方法要返回指向容器第一个元素的迭代器,end()方法要返回指向容器结尾后一个位置的迭代器

关于迭代器,我将会在后续文章中讲述。

🚀指针空值nullptr(C++11)

在C语言中,我们常使用NULL来给指针置空,但是NULL是一个宏被定义为0或者是void*(0),这会导致类型不明确,因为0也可以被视为整型,而且使用NULL还要包头文件,麻烦。

但是在C++11中引入了nullptr来给指针置空,nullptr是一个关键字不用包头文件,而且他的类型明确为指针,类型不存在歧义,建议以后大家给指针置空使用nullptr


好了,就分享到这,如果有帮到您,就帮我点个赞呗,感谢大家支持!!!
请添加图片描述

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿辉不一般

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值