【C++STL】auto关键字(最新最全面)

目录

一、auto简介

二、auto应用场景

简化类型声明: 假设有一个复杂的类型 std::map>,使用 auto 可以简化变量的声明,>

自动类型推断: 当类型由编译器根据表达式推断时,auto 非常有用。

在范围基于的 for 循环中: 使用 auto 可以简化循环中变量的声明

在返回复杂类型的函数中: 使用 auto 简化函数返回类型的声明。

与迭代器一起使用: 在使用标准库容器时,auto 可以自动获取正确的迭代器类型。

在 lambda 表达式中: 使用 auto 声明 lambda 表达式中的捕获变量。

类型推导限制: 使用 auto 与类型修饰符一起使用,限制推导的类型。

三、注意


一、auto简介

在C++中,auto 关键字用于声明变量时自动推断其类型。它允许编译器根据初始化表达式来确定变量的类型。使用 auto 可以减少代码量,提高代码的可读性,并且有助于编写更通用和可重用的代码。


二、auto应用场景

  • 简化类型声明: 假设有一个复杂的类型 std::map<int, std::vector<std::string>>,使用 auto 可以简化变量的声明
std::map<int, std::vector<std::string>> complexMap = {{1, {"apple", "banana"}}, {2, {"car", "dog"}}};
auto simplifiedMap = complexMap; // simplifiedMap 的类型自动推断为 std::map<int, std::vector<std::string>>
  • 自动类型推断: 当类型由编译器根据表达式推断时,auto 非常有用。
auto x = 10; // x 的类型为 int
auto y = 3.14159; // y 的类型为 double
auto str = "Hello, auto!"; // str 的类型为 const char[]
  • 在范围基于的 for 循环中: 使用 auto 可以简化循环中变量的声明
for (auto element : container) {
    // 使用 element
}

 eg:

int arr[] = { 0,1,2,3,4 };
for (auto i : arr) //将arr元素一个个拷贝到i,不能通过i改变数组元素
	cout << i << ' ';
cout << endl;
//--------------------------
for (auto& i : arr)//引用,可以通过i改变数组元素
	++i;
for (auto i : arr)
	cout << i << ' ';
cout << endl;
//--------------------------
std::map<std::string, int> scores = {{"Alice", 90}, {"Bob", 85}};
for (auto& score : scores) {
    std::cout << score.first << " has score " << score.second << std::endl;
}

  • 在返回复杂类型的函数中: 使用 auto 简化函数返回类型的声明。
auto complexFunction() -> std::pair<int, double> {
    return {1, 2.5};
}
auto result = complexFunction(); // result 的类型自动推断为 std::pair<int, double>
  • 与迭代器一起使用: 在使用标准库容器时,auto 可以自动获取正确的迭代器类型。
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (auto it = numbers.begin(); it != numbers.end(); ++it) {
    std::cout << *it << " "; // 打印每个元素
}
  • 在 lambda 表达式中: 使用 auto 声明 lambda 表达式中的捕获变量。
int value = 5;
auto lambda = [value](){ return value * 2; };
std::cout << lambda() << std::endl; // 输出 10
  • 类型推导限制: 使用 auto 与类型修饰符一起使用,限制推导的类型。
auto a = &someValue; // a 的类型为 int* (如果 someValue 是 int 类型)
const auto b = someValue; // b 的类型为 const int (如果 someValue 是 int 类型)
auto& ref = someValue; // ref 是 someValue 的引用

三、注意

  • auto声明变量必须初始化。
  • auto不能作为函数参数。
  • auto* a 强调变量 a 是指针,即a只能接受指针类型,并不是将变量类型改为指针类型。
  • auto& b 强调b是引用,但引用除了可以接收引用,还可以接收其它类型,说明b是该类型变量的引用。
  • auto并不总是最佳选择。在某些情况下,显式声明类型可以提高代码的可读性和可维护性,尤其是在类型不直观或复杂的情况下
  • auto 在递归函数或涉及模板元编程的情况下可能会导致问题,因为这些情况下类型依赖于编译时的计算。

才疏学浅,然孜孜不倦,愿与诸君共勉

如有纰漏,欢迎大家批评指正。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值