C++auto关键字

随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在:

1. 类型难于拼写

2. 含义不明确导致容易出错

std::map::iterator 是一个类型,但是该类型太长了,特别容易写错。

如果使用typedef呢?

根据上图发现typedef确实可以简化代码,但是typedef会有别的问题

使用了typedef之后,遇到这种情况容易被误导。而在编译的时候往往需要把表达式的值清楚的赋值给变量,所以更应该清楚的知道表达式的类型。

(关于为什么typedef会有这样问题,这边本人有看到一篇讲的比较详细的博客,有兴趣的同志们,可以再去了解一下。https://blog.csdn.net/m0_74376760/article/details/127986087?spm=1001.2014.3001.5502


auto简介

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

(typeid这个可以查看变量类型)

使用auto定义变量时必须对其进行初始化,在编译阶段编译器需要根据初始化表达式来推到auto的实际类型。


auto的使用细则

1.auto与指针、引用结合使用

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

2.在同一行定义多个变量

当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行


auto不能推导的场景

1.auto不能作为函数的参数

(因为函数参数需要在编译时就确定,而auto定义的变量类型是在编译运行时确定的)

2.auto不能直接用来声明数组

(auto关键字在推导类型时,只能根据单个初始化表达式的类型来推导。对于数组,编译器需要知道数组的元素类型和数组的大小。auto关键字无法同时推导这两个信息。)


auto在实际中常见的优势用法就是和范围for循环,以及lambda表达式配合使用。

拜拜~下次再见~

欢迎批评指正!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中提到,C语言中的auto关键字用于声明变量并自动推断其类型。auto declarator initializer*;的语法表示可以声明一个或多个具有自动类型推断的变量。同时,引用也提到了C语言引入了auto关键字来实现类型推导,通过auto关键字可以方便获取复杂的类型,并简化书写,提高编码效率。 更具体地说,使用auto关键字声明变量时,编译器会根据变量的初始化表达式来推断变量的类型。这样可以减少代码中的类型声明,使代码更加简洁和灵活。例如,在函数参数中使用auto关键字可以实现参数的类型推导,使函数调用更加方便。同时,auto关键字还可以与范围for循环结合使用,自动推断容器中元素的类型。 关于C语言auto关键字的更多详细信息,可以参考引用所提供的Microsoft的官方文档链接。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C++ auto关键字](https://blog.csdn.net/L_Chee/article/details/125349312)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [C++基础:关键字auto](https://blog.csdn.net/weixin_58368590/article/details/124871252)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值