欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

详析C++中的auto

时间:2022-12-20 10:12:16|栏目:C代码|点击:

1.auto介绍

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

可以使用typeid().name 去打印对象的类型。

案例分析:

int TestAuto()
{
    return 2;
}

int main()
{
    int a = 10; 
    auto b = a; auto c = 'a'; 
    auto d = TestAuto();  
    cout << typeid(b).name() << endl; 
    cout << typeid(c).name() << endl;
    cout << typeid(d).name() << endl;
    return 0;
}

输出结果:

int
char
int

注意:

auto e; 无法通过编译,使用 auto 定义变量时必须对其进行初始化。

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

2.auto使用细则

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

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

案例分析:

int main()
{
    int x = 10;
    auto a = &x;
    auto* b = &x;
    auto& c = x;

    cout << typeid(a).name() << endl;
    cout << typeid(b).name() << endl;
    cout << typeid(c).name() << endl;

    *a = 20;
    *b = 30;
    c = 40;
    return 0;
}

输出结果:

int * __ptr64
int * __ptr64
int

在同一行定义多个变量:

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

3.auto不能推导的场景

auto 不能作为函数的参数:

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

void TestAuto()
{ 
    int a[] = {1,2,3}; 
    auto b[] = {4,5,6};
}

为了避免与C++98中的auto发生混淆,C++11只保留了auto作为类型指示符的用法
auto在实际中最常见的优势用法就是跟C++11提供的新式for循环,还有lambda表达式等进行配合使用。

上一篇:教你Clion调试ROS包的方法

栏    目:C代码

下一篇:C语言零基础入门(1)

本文标题:详析C++中的auto

本文地址:http://www.codeinn.net/misctech/221809.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有