C++:auto
简介
从其初始化表达式中推导声明的变量的类型。
备注
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;<