21天学会C++:Day7----auto关键字

这篇具有很好参考价值的文章主要介绍了21天学会C++:Day7----auto关键字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

· CSDN的uu们,大家好。这里是C++入门的第七讲。
· 座右铭:前路坎坷,披荆斩棘,扶摇直上。
· 博客主页: @姬如祎
· 收录专栏:C++专题

21天学会C++:Day7----auto关键字

目录

1. 知识引入

2. auto的使用

2.1 auto与指针和引用结合起来使用

2.2 在同一行定义多个变量

2.3 auto不能推导的场景 

2.3.1 auto不能作为函数的参数

2.3.2 auto不能直接用来声明数组

 3. auto与范围for的结合


1. 知识引入

曾记否,我们在用C语言实现基础的数据结构时,会用到结构体来作为链表的一个节点,像这样:

struct ListNode
{
	struct ListNode* next;
	int val;
};

int main()
{
	struct ListNode node;
}

我们在使用这个节点的时候,前面的变量类型就要写这么多,是不是很烦,很不舒服。当然你也可能会觉得这还好啊,不久两个单词嘛。但是在C++的后续学习过程中你可能会遇到这样的变量类型:

#include<map>
#include<string>

int main()
{
	std::map<std::string, std::string>::iterator a;
}

这样看下来是不是觉得写变量的类型还是真的有些麻烦。不过聪明的UU可能想到可以用 typedef 给变量区别名来达到简化的效果,非常棒!但是呢,C++引入了一种更为简单的方式:

C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。

 意思就是,auto关键字能够自动推导变量的类型。当然你是用 auto 时,编译器无法推出变量的类型就会报错的啦!

int main()
{
	auto a = 10; //正确的写法
	auto e; //错误的写法
}

2. auto的使用

int main()
{
    auto e;
}

上面提到 这种写法是不正确的,原因是什么呢?来看看标准化的解释: 

使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推导auto的实际类型。因此auto并非是一种“类型”的声明,而是一个类型声明时的“占位符”,编译器在编译期会将auto替换为变量实际的类型。

2.1 auto与指针和引用结合起来使用

用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须
加&。

int main()
{
	auto a = 10;
	auto pa1 = &a;
	auto* pa2 = &a;
	auto& ra = a; //声明引用必须加&

	cout << typeid(a).name() << endl;
	cout << typeid(pa1).name() << endl;
	cout << typeid(pa2).name() << endl;
	cout << typeid(ra).name() << endl;

}

为什么声明引用必须加上&呢?原因很简单,拿上面的例子来说,不加&,只是声明了一个 int 类型的变量,然后赋值为 a 的值。另外我们可以使用 typeid(变量).name() 来查看变量的类型。

21天学会C++:Day7----auto关键字

2.2 在同一行定义多个变量

当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译
器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。

21天学会C++:Day7----auto关键字

2.3 auto不能推导的场景 

2.3.1 auto不能作为函数的参数

void Func1(auto b) //错误的写法
{

}

void Func2(auto a = 10) //错误的写法
{

}

代码会编译失败,auto不能作为形参类型,因为编译器无法对a的实际类型进行推导。缺省的参数也不行哦!

2.3.2 auto不能直接用来声明数组

auto a[4] = { 1,2,3,4 }; //错误的写法

 21天学会C++:Day7----auto关键字

 3. auto与范围for的结合

在C++98中我们要遍历数组,会写出这样的代码:

int main()
{
	int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
	for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
		cout << a[i] << " ";
}

 但是这种鞋码对于一个本身就有范围的集合来说,我们还去自己写代码来指定他的范围就显得有些多余了!甚至可能哈辉犯错误!因此C++11中引入了基于范围的for循环。for循环后的括号由冒号(:)分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。

int main()
{
	int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
	for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
		cout << a[i] << " ";

	for (auto i : a)
		cout << i << " ";

	for (int i : a)
		cout << i << " ";
}

 上面的三种写法都是等效的,可以使用auto来自动推导得到的变量类型。

注意:与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环。

你如果要改变原数组的值,你可以使用引用哦!像下面这样:

int main()
{
	int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
	for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
		a[i] += 1;

	for (auto& i : a)
		i += 1;

	for (int& i : a)
		i += 1;
}

范围for循环的底层是使用迭代器来完成遍历的操作的。至于迭代器是个啥,后面会讲到!!!

21天学会C++:Day7----auto关键字

 文章来源地址https://www.toymoban.com/news/detail-477448.html

到了这里,关于21天学会C++:Day7----auto关键字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++入门】引用、内联函数、auto 关键字

    从语法上理解,引用就是给变量取一个 别名 ,它没有独立空间,和它引用的变量共用一块空间。 例子: 值得注意的是,C++ 中的引用一经初始化,后面是改变不了指向的(这点与Java有所不同),而且引用是必须初始化的。 引用的类型也必须和原变量对应,显然,你肯定不能

    2024年02月16日
    浏览(37)
  • 【C++】C++入门 auto关键字详解(C++11)

    前言 C语言中包括了auto,它可用于定义局部变量。但自从所有的非全局变量的缺省值假定为auto以来,auto就几乎很少使用了。 在C或者以前C++中,auto基本上可以被无视. 但是在C++11中auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器, a

    2024年02月08日
    浏览(34)
  • 【C++初阶(三)】引用&内联函数&auto关键字

    目录  前言  1. 引用   1.1 引用的概念   1.2 引用的特性  1.3 引用的权限  1.4 引用的使用  1.5 引用与指针的区别 2. 内联函数 2.1  什么是内联函数 2.2  内联函数的特性  3. auto  3.1 auto简介  3.2 auto使用规则  3.3 auto不能使用的场景 4.  基于范围的for循环  4.1 范围for使用

    2024年02月08日
    浏览(47)
  • c++ for循环中使用auto关键字

    代码 编译运行结果 总结 代码 编译运行结果 总结

    2024年02月14日
    浏览(33)
  • 【C++】:函数重载,引用,内联函数,auto关键字,基于范围的for循环,nullptr关键字

    在C语言中,同名函数是不能出现在同一作用域的,但是在C++中却可以,但是要满足函数重载的规则。 那什么是函数重载呢?它的规则是什么呢? 函数重载 :是函数的一种特殊情况,C++允许在 同一作用域 中声明几个功能类似的 同名函数 ,这些同名函数的 形参列表(参数个数

    2024年04月26日
    浏览(40)
  • C++面试八股文:了解auto关键字吗?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第15面: 面试官:了解 auto 吗? 二师兄:嗯,了解一些(我很熟悉)。 面试官:说一说 auto 的用法吧? 二师兄: auto 主要是为了编译器进行类型推导。比如: 二师兄:也可以作为函数返回类型的占位符: 二师兄:在C

    2024年02月09日
    浏览(34)
  • 【C++入门必备知识:|引用| +|auto关键字| + |范围for|】

    在这里插入图片描述 引用不是新定义一个变量,而是给已经存在的变量取别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存区间。 比如水浒传里的李逵 小名叫铁牛,江湖人称黑旋风。这些都是他,只不过名字不同。 类型 引用变量名=引用实体

    2023年04月22日
    浏览(41)
  • 【C++初阶】引用&内联函数&auto关键字&范围for循环&nullptr

    ========================================================================= 个人主页还有更多系列专栏: 小白不是程序媛 我的小仓库: Gitee C++系列专栏: C++头疼记 ========================================================================= 目录 前言 引用 概念 引用的特点 常引用  引用的使用场景 做参数  做返

    2024年02月08日
    浏览(36)
  • 【C++深入浅出】初识C++下篇(auto关键字、范围for、nullptr指针)

    目录 一. 前言 二. auto 2.1 auto的引入 2.2 auto简介 2.3 auto的使用细则 2.4 auto不能推导的场景 三. 基于范围的for循环(C++11) 3.1 范围for的语法 3.2 范围for的原理 3.3 范围for的使用条件 四. 指针空值nullptr(C++11)         上期我们介绍了c++新增的两个重要语法:引用和内联函数,今

    2024年02月11日
    浏览(42)
  • 【C++入门】auto关键字(C++11) + 指针空值nullptr(C++11)

    👦个人主页:@Weraphael ✍🏻作者简介:目前学习C++和算法 ✈️专栏:C++航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨ 本章是补充C语言语法的不足,以及C++是如何对C语言设计不合理的地方进行优化的。 随

    2024年02月04日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包