C++ 中的auto关键字

本文介绍了C++11中auto关键字的新用途,它不再是存储类型指示符,而是用于编译器类型推导。内容包括auto的使用规则,如结合指针和引用、同一行定义多个变量,以及无法推导的场景,如不能作为函数参数和声明数组。此外,还讨论了auto在新式for循环和lambda表达式中的应用。

auto关键字

C++11

1. auto简介

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

int a = 5;
auto b = a;

cout << typeid(b).name() << endl;
在不同版本的C++中,`auto`关键字的语法和使用规则有所发展和变化,以下是主要版本的总结: ### C++11 - **类型自动推导**:`auto`是一个类型说明符,编译器通过变量的初始值或者表达式中参与运算的数据类型来推断变量的类型。使用`auto`定义的变量必须初始化,否则会编译报错。例如: ```cpp auto val = 5.2f; // 编译器推断val的数据类型为float auto x = y + z; // x初始化为y和z相加的结果,由y和z的数据类型推断x的数据类型 ``` - **结合指针和引用**:`auto`可以与指针和引用结合使用。 - **同一行声明多个变量**:在同一行声明多个变量时,这些变量必须是相同的类型。 - **限制**:`auto`不能作为函数的参数,也不能直接用来声明数组 [^1][^2]。 ### C++14 - **返回类型推导**:`auto`可以用于函数返回类型的推导。例如: ```cpp auto add(int a, int b) { return a + b; } ``` - **lambda表达式参数类型推导**:在lambda表达式中,参数类型可以使用`auto`进行推导。例如: ```cpp auto lambda = [](auto a, auto b) { return a + b; }; ``` ### C++17 - **结构化绑定**:`auto`可用于结构化绑定,简化对结构体、元组等的成员访问。例如: ```cpp #include <iostream> #include <tuple> std::tuple<int, double> getValues() { return {1, 2.0}; } int main() { auto [a, b] = getValues(); std::cout << a << " " << b << std::endl; return 0; } ``` - **`auto`作为非类型模板参数**:在模板编程中,`auto`可以作为非类型模板参数。 ### C++20 - **概念约束的`auto`**:结合概念(Concepts),可以对`auto`类型进行约束。例如: ```cpp #include <concepts> template <std::integral T> auto add(T a, T b) { return a + b; } ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值