-Auto-

嘿嘿嘿没错封面是我画的

今天我们来讲一下 A u t o Auto Auto是什么 , , ,
不会的小伙伴听好了!​ 不会的小伙伴听好了!​ 不会的小伙伴听好了!

在C++编程语言中,

auto

是一个关键字,其用途随着 C + + C++ C++标准的发展而发生了变化:

  1. C++98/C++03 中,
auto

关键字用于声明一个具有自动存储持续期 ( a u t o m a t i c s t o r a g e d u r a t i o n ) (automatic storage duration) automaticstorageduration的局部变量,这通常是指函数内部的变量,默认情况下它们会在离开作用域时自动销毁。但在旧标准中,这个关键字很少被使用,因为显式指定类型更为常见。

  1. C + + 11 C++11 C++11及以后版本 引入了一种新的用法,使得
auto

成为了一个非常重要的关键字,用于类型推断。现在,

auto

主要用于声明变量时,编译器会根据初始化表达式的类型自动推断变量的类型。例如:

int x = 10;
auto y = x; // 编译器推断 y 为 int 类型

这极大地提高了代码的简洁性和可读性,尤其是在处理复杂的类型、模板表达式或lambda表达式返回类型时。

  1. C + + 11 C++11 C++11中的函数返回类型推断:
auto

也可以与

decltype

结合使用,或者作为函数返回类型的占位符,编译器会根据函数体内的返回表达式推断函数的返回类型 。 。

template<typename T>
auto max(T a, T b) -> decltype(a > b ? a : b) {
    return a > b ? a : b;
}

C + + 14 C++14 C++14开始,还可以更简洁地写成:

template<typename T>
auto max(T a, T b) {
    return a > b ? a : b;
}
  1. 范围基础循环(range - based for loop)中也经常使用
auto

编译器会根据迭代的对象自动推断循环变量的类型 : :

std::vector<int> vec = {1, 2, 3};
for (auto i : vec) {
    // 这里 i 的类型会被推断为 int
}

5. 5. 5.

 auto

并不是动态类型,一旦类型被编译器推断出来后,该变量在整个生命周期内都会保持同一类型,并且不能再赋给不同类型的值 。 。
另外,尽管类型是编译时推断出来的,但这种推断并不会影响程序的运行时效率,因为所有类型信息在编译阶段就已经确定 。 。

​那么,auto到底怎么用???

在C++编程语言中,

auto

关键字有两种主要用途:

  1. 类型推断 ( T y p e D e d u c t i o n ) (Type Deduction) TypeDeduction: 自 C + + 11 C++11 C++11开始,
auto

关键字被赋予了新的意义,主要用于类型推断。当声明一个变量并使用

auto

关键字时,编译器会根据初始化表达式右侧的类型自动推断出变量的类型。

例如:

auto x = 5;  // x 的类型被推导为 int
auto pi = 3.14;  // pi 的类型被推导为 double
auto name = "John";  // name 的类型被推导为 const char*
std::vector<int> vec = {1, 2, 3};
auto it = vec.begin();  // it 的类型被推导为 std::vector<int>::iterator
  1. 基于范围的for循环 ( R a n g e − B a s e d F o r L o o p ) (Range-Based For Loop) RangeBasedForLoop:
auto

在基于范围的 f o r for for循环中特别有用,它可以自动推导出循环变量的类型,简化迭代容器元素的过程:

std::vector<std::string> words = {"hello", "world"};
for (auto word : words) {
    // word 的类型被推导为 std::string
    std::cout << word << ' ';
}

decltype 和模板元编程中的应用

auto

还可以用在

decltype

或模板元编程中,用于指定函数返回类型或者其他需要延迟计算类型的场景:

template<typename _Tx, typename _Ty>
auto multiply(_Tx x, _Ty y) -> decltype(x * y) {
    return x * y;
}

在这个例子中,

auto

后面跟着一个返回类型说明符

-> decltype(x * y)

这意味着函数

multiply

的返回类型将是

_Tx

_Ty

类型相乘的结果类型。

总之,

auto

关键字极大地提高了代码的可读性和简洁性,减少了显式类型声明的需求,并且有助于减少由于类型变更导致的修改工作量。但它并不意味着动态类型,编译器在编译期就会确定

auto

变量的确切类型,并且

auto

声明的变量必须立即初始化。


——Auto——

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值