auto是什么意思?

auto是什么意思?,第1张

auto是一个C/C++语言存储类型,仅在语句块内部使用,初始化可为任何表达式,其特点是当执行流程进入该语句块的时候初始化可为任何表达式。

auto被解释为一个自动存储变量的关键字,也就是申明一块临时的变量内存。

auto对应:

C语言中提供了存储说明符auto、register、extern、static说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期。其中auto和register对应自动存储期。

具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。在函数内部定义的变量成为局部变量。在某些C语言教材中,局部变量称为自动变量,这就与使用可选关键字auto定义局部变量这一作法保持一致。

  在c++11时代,auto用于变量的自动类型推断:在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型,而不需要我们显示指定类型。

  auto有以下特点:

                  1. auto自动类型推断发生在编译期,所以不会影响程序执行期间的性能

                  2.auto定义的变量必须立即初始化,这样编译器才能推断它的实际类型,那么编译的时候才能确定auto的类型和整个变量的类型,然后在编译期间就可以用真正的类型替换掉auto这个类型占位符

                  3.auto的使用灵活,和指针,和引用,和const等限定符结合使用。

  注意,auto类型推断,和函数模板推断非常类似。

   auto类型推断为传值方式(非指针,非引用),即auto后面直接接变量名

   注意,在传值方式下,引用类型会被抛弃,const属性也会被抛弃。

   注意,在指针或者引用类型(auto*,auto&)但不是万能引用下,不会抛弃const等限定符,但是会丢弃引用。

   当变量类型为万能引用时(auto&&),和模板参数T类型规则相同

   注意,auto it={1,3,5}这是一个针对auto的特殊推导,能推导出std::initializer_list类型。这种推导只适合auto,不适合模板类型。这一点是auto类型推导和模板类型推导的区别之处。其他方面,auto和模板类型推导差不多

   (1)auto不能用于函数参数,比如void func(auto arg1,int y)是不被允许的

   (2)普通成员变量类型不能是auto类型,static const静态成员可以使用auto,使用auto后,其值必须在类内初始化,注意static const和普通静态成员不一样,普通静态成员在头文件声明,然后在.cpp中定义和初始化,static const静态成员就在类里定义和初始化了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11441469.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存