C++:auto

本文详细介绍了C++中的`auto`关键字,包括其语法、用法、优势以及与引用和cv限定符的交互。`auto`简化了复杂类型的变量声明,尤其是在模板库的编写中。同时,文中通过示例展示了`auto`在不同场景下的应用,如初始化、返回类型推导和范围for循环等。
摘要由CSDN通过智能技术生成

简介

从其初始化表达式中推导声明的变量的类型。

备注

C + + 标准定义此关键字的原始和修订的含义。 在 Visual Studio 2010 之前, auto 关键字在 自动 存储类中声明变量,即具有本地生存期的变量。 从 Visual Studio 2010 开始, auto 关键字声明一个变量,该变量的类型是从其声明中的初始化表达式推导出来的。 /Zc:auto[ ]编译器选项控制关键字的含义 auto 。

语法

auto声明符初始值设定项;**

[](autoparam1 , autoparam2) {};

备注

auto 关键字指示编译器使用已声明变量的初始化表达式,或使用 lambda 表达式参数来推导其类型。

建议你在 auto 大多数情况下使用关键字,除非你确实需要转换,因为它具有以下优势:

可靠性: 如果表达式的类型发生更改(这包括在函数返回类型发生更改时),则它将正常工作。

性能: 您可以保证不会进行任何转换。

可用性: 无需担心类型名称拼写错误和拼写错误。

效率: 你的编码可能更高效。

可能不想使用的转换情况 auto :

当需要特定类型且不需要执行任何其他操作时。

表达式模板帮助程序类型,例如 (valarray+valarray) 。

若要使用 auto 关键字,请使用它(而不是类型)来声明变量,并指定初始化表达式。 此外,还可以 auto 使用说明符和声明符(如 const 、 volatile 、指针 (*) 、引用 (&) 和右值引用 (&&) 来修改关键字。 编译器计算初始化表达式,然后使用该信息来推断变量类型。

auto 初始化表达式可以采用多种形式:

通用初始化语法,如 auto a { 42 }; 。
赋值语法,如 auto b = 0; 。
通用赋值语法,它结合了前两种形式,例如 auto c = { 3.14156 }; 。
直接初始化或构造函数样式语法,如 auto d( 1.41421f ); 。

当 auto 用于在基于范围的语句中声明循环参数时 for ,它将使用不同的初始化语法,例如 for (auto& i : iterable) do_action(i); 。

auto 关键字是类型的占位符,但它本身不是类型。 因此, auto 关键字不能用于 sizeof c + +/cli) 的强制转换或运算符(例如和) (typeid 。

有用性

auto 关键字是声明具有复杂类型的变量的一种简单方法。 例如,可以使用 auto 声明一个变量,其中的初始化表达式包含模板、指向函数的指针或指向成员的指针。

还可以使用 auto 将变量声明并初始化为 lambda 表达式。 您不能自行声明变量的类型,因为仅编译器知道 lambda 表达式的类型。

尾部的返回类型

可以结合使用 auto 和 decltype 类型说明符来帮助编写模板库。 使用 auto 和 decltype 来声明其返回类型依赖于其模板参数类型的模板函数。 或者,使用 auto 和 decltype 来声明一个模板函数,该函数包装对其他函数的调用,然后返回该函数的返回类型的任何内容。

引用和 cv 限定符

请注意,使用 auto “删除引用”、" const 限定符" 和 " volatile 限定符"。 请看下面的示例:

// cl.exe /analyze /EHsc /W4
#include <iostream>

using namespace std;

int main( )
{
   
    int count = 10;
    int& countRef = count;
    auto myAuto = countRef;

    countRef = 11;
    cout << count << " ";

    myAuto = 12;<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值