C++ 中 auto 关键字使用总结

背景

在编程语言的分类中,C++ 被分为是“静态语言”,因为在 C++ 中通常在使用一个变量前必须要有定义,而在“动态语言”如:Ptython 中变量就不需要申明。
静态类型和动态类型的主要区别在于对变量进行类型检查的时间点:静态类型主要发生在编译阶段;动态类型发生在运行阶段。
动态类型实现的本质是类型推导,而在 C++ 中类型推导的实现方式之一就是 auto 关键字。

auto

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

auto str = "hello";//str 类型为 const char *
auto a;//错误,无法推导

auto 自动类型推断发生在编译期,因此 auto 定义变量必须立即初始化,这样编译期才能推断它的实际类型。

auto 的基本使用

①.使用 auto 简化变量声明

std::map<string, int> m_map;
for (auto iter = m_map.begin(); iter != m_map.end(); ++iter) 
{
}

②.使用 auto 可以避免声明错误

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

③.auto 的自适应性

float func(float a ){ return  a ;} 

float a = 1.0f;
auto x = func(a);
//当 func 返回类型改变,比如改为返回 double ,x类型自动改变 

auto 的类型推导

①.auto 和指针
如果 auto 声明的是指针类型,则 auto 和 auto * 效果一样。

int a = 10;
auto x = &a;//x 为 int* 类型
auto *y = &a;//y 为 int* 类型

②.auto 和引用
如果 auto 声明的是引用类型,则必须使用 auto& 。

int a = 10;
auto & z = a;//z 为 int& 类型

③.auto 和 const
声明为 auto 类型的变量并不能从其初始化表达式中带走 const 限定符。

int func();
const auto x = func;//x为 const int 类型
auto y = x;// y 为int 类型

④.auto 和 {}
C++ 支持使用 {} 进行统一初始化。

auto x= { 30 };    // x 类型为 std::initializer_list<int> 
auto y{ 40 };      // y 类型为 int 

⑤.auto 和函数指针

float func(float a ){ return  a ;} 
auto f = func;// f 类型为 float(*)(float)

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值