首页 > 其他分享 >Auto关键字

Auto关键字

时间:2024-03-06 22:55:06浏览次数:17  
标签:std 初始化 推导 Auto 代码 关键字 auto 类型

在 C++中,auto 关键字用于自动类型推导,它让编译器能够自动确定变量的类型。这个特性最初在 C++11 标准中引入,旨在简化代码编写,提高代码的可读性和可维护性。使用 auto 时,编译器会根据变量的初始化表达式推断其类型。

使用场景和好处

  1. 迭代器和复杂类型:当处理 STL 容器如 std::vectorstd::map 等容器的迭代器或者复杂类型时,使用 auto 可以避免编写冗长的类型声明。

  2. Lambda 表达式:对于 lambda 表达式或其他复杂类型的返回值,使用 auto 可以简化代码。

  3. 类型安全auto 关键字能保证类型安全,因为编译器会在编译时推导出确切的类型,避免了隐式类型转换的问题。

  4. 提高代码可读性和维护性:使用 auto 可以减少代码中的类型声明,使代码更简洁,更易于阅读和维护。

使用示例

#include <vector>
#include <map>
#include <iostream>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    
    // 使用auto遍历vector
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;
    
    std::map<int, std::string> map = {{1, "one"}, {2, "two"}};
    
    // 使用auto遍历map
    for (auto& pair : map) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }
    
    // 使用auto接收lambda表达式的返回值
    auto sum = [](int x, int y) { return x + y; };
    std::cout << "Sum: " << sum(1, 2) << std::endl;
    
    return 0;
}

注意事项

  • 初始化必须:使用 auto 时,变量必须在声明的同时被初始化,因为编译器需要初始化表达式来推导类型。

  • 顶层 const 和引用auto 会忽略初始化表达式的顶层 const,但保留底层 const。如果需要顶层 const,需要显式指定。对于引用,使用 auto 时也需要注意是否显式指定 &

  • decltype 的区别auto 用于变量的类型推导,主要用于变量初始化。decltype 用于推导表达式的类型,常用于模板编程和类型推导的场合,两者虽然相关,但用途不同。

  • auto 增加引用(&)可以对当前的 auto &ii 进行修改,如果不使用引用,则不会进行修改。引用也更快,减少复制过程。

auto 关键字的引入极大地增强了 C++的表达能力,使得编写通用代码和库更加方便,同时也提高了代码的可读性。

标签:std,初始化,推导,Auto,代码,关键字,auto,类型
From: https://www.cnblogs.com/Phantasia/p/18057839

相关文章

  • Autowired和Resource的区别
    @Autowired是Spring框架中的注解,它可以用来标注字段、构造函数、方法等,表示需要自动装配。它可以用来注入依赖的bean。如果有多个bean符合条件,可能会抛出异常。@Resource是Java自带的注解,它可以用来标注字段、方法等,表示需要自动装配。它可以用来注入依赖的bean。如果有多个bean......
  • 学习笔记:AutoSTG
    AutoSTG:NeuralArchitectureSearchforPredictionsofSpatio-TemporalGraph期刊会议:WWW2021论文地址:https://dl.acm.org/doi/10.1145/3442381.3449816代码地址:https://github.com/panzheyi/AutoSTG总结AutoSTG不仅自学网络权重,还自学网络结构。网络结构的学习采用Dar......
  • Oracle中不允许表的列名称使用Oracle声明的关键字! (ORA-01747: user.table.column, t
    1.问题ORA-01747:user.table.column,table.column或列说明无效--Oracle下,根据商品价格从高到低取4-6名商品SELECT*FROM( SELECTROWNUM,t1.* FROM( SELECTprod_name,prod_price FROMPRODUCTS ORDERBYPROD_PRICEDESC )t1 WHEREROWNUM<=6......
  • 以不变应万变:final关键字和不变形
    以不变应万变:final关键字和不变形目录以不变应万变:final关键字和不变形什么是不变形(Immutable)final的作用3种用法:修饰变量、方法、类赋值时机注意点final修饰方法final修饰类总结不变性和final的关系总结出,满足以下条件时,对象才是不可变的把变量写在线程内部——栈封闭什么是不......
  • C# new 关键字用法
    试题回答参考思路:一,用法总结:在c#中,new关键字可用作运算符,声明修饰符,约束。1)new运算符:new运算符创建类型的新实例,调用构造函数(如果继承了基类,同时会调用基类的构造函数)。2)new声明修饰符:2.1)在用作声明修饰符时,new关键字可以显式隐藏从基类继承的成员。派生类成员变量被new关键字......
  • JAVA面向对象基础:this关键字
    this;this就是一个变量,可以用在方法中,来拿到拿到当前对象   this的应用场景:this主要用来解决变量名称冲突问题的。   this真正解析: ......
  • C++系列:const关键字
    前言在学习C++时,const关键字的知识点分散在书的各个章节。当我们尝试在编程时使用const时,总会感觉有一些细节被遗忘,因而不能得心应手地使用const关键字。因此,本篇文章尝试着对const关键字的做一些总结。参考书籍《C++PrimerPlus》const总结这里是我做的关于const关键字的一些......
  • AutoMapper
    AutoMapper的实现,与应用AutoMapper是一个简单的小库,旨在解决一个看似复杂的问题-摆脱将一个对象映射到另一个对象的代码,比如说当我用前台传来的DTO需要映射到实体的时候,我们总不能一个一个赋值,100个字段,200个字段呢,这里映射代码就很无聊,也很费时间,所有我们用到AutoMapper......
  • 配置AutoMapper
    配置AutoMapperAutoMapper是一个开源的.NET库,用于自动将一个对象的属性映射到另一个对象的属性。它能够简化对象之间的映射过程,减少手动编写重复的映射代码,提高开发效率。1、在需要的层引包(Api和Services层)2、program注入3、在api创建一个文件夹和一个类4、在创建的类里写......
  • AutoMapper
    AutoMapper的实现,与应用AutoMapper是一个简单的小库,旨在解决一个看似复杂的问题-摆脱将一个对象映射到另一个对象的代码,比如说当我用前台传来的DTO需要映射到实体的时候,我们总不能一个一个赋值,100个字段,200个字段呢,这里映射代码就很无聊,也很费时间,所有我们用到AutoMapper......