• C++auto 关键字


    auto 关键字在 C 语言中就已经存在了,只不过在 C 语言中它的作用是声明自动变量,例如
    auto int z = 123 ;
            z 本来是局部变量,加上 auto 后变成了局部的自动变量,就是当前变量的生存周期是由编译器自动决定的,但是这和局部变量没有区别,所以 auto C 语言中并没有发挥什么作用。
            在 C++11 中,就赋予了 auto 一个新的功能-自动类型推导。auto 声明的变量必须由编译器在编译时期推导而得,简单来说就是由编译器来识别变量的类型。
            注意:使用 auto 定义变量时必须对其进行 初始化 ,在编译阶段编译器需要根据初始化表达式来推导 auto 的实际类型。因此 auto 并非是一种 类型 的声明,而是一个类型声明时的 占位符” ,编译器在编译期会将 auto 替换为变量实际的类型。
    auto a; //错误,使用 auto 初始化变量必须赋值

    auto 使用注意事项

    1.不能作为函数参数,例:
    1. void func(auto x, auto y) {}
    2. void func(auto x, double y) {}
    3. int main()
    4. {
    5. func(1, 2);
    6. func(1.2, 1.2);
    7. return 0;
    8. }
    编译报错,影响重载形式下的调用绑定
    2.无法作为模板参数
    3.无法定义数组
    4.不能定义类中的非静态成员变量
    5. 当在同一行声明多个变量时,这些变量必须是 相同的类型 ,否则编译器将会报错,因为编译 器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。
    1. void TestAuto()
    2. {
    3. auto a = 1, b = 2;
    4. auto c = 3, d = 4.0; // 该行代码会编译失败,因为 c 和 d 的初始化表达式类型同
    5. }
    6. 用 auto 声明指针类型时,用 auto 和 auto*  没有任何区别 ,但用 auto 声明引用类型时则必须加&,例:
    1. int main()
    2. {
    3. int x = 10;
    4. auto a = &x;//与下面 auto* 声明没有区别
    5. auto* b = &x; //与上面 auto 声明没有区别
    6. auto c = x; //auto 推导出来是一个 int 型,c 并不会是 x 的引用
    7. auto& c = x; //正确写法
    8. return 0;
    9. }
    7.auto 会自动去除 const 属性,解释如下:
    1. int main(int argc, char const *argv[])
    2. {
    3. const int a = 10;
    4. auto b = a; //b 为 int,不会推导为 const int
    5. auto c = 'A'; //c 推导为 char,不会推导会 const char
    6. auto &d = a; //这个时候 d 就会带 const 属性了,因为它是 a 的引用
    7. return 0;
    8. }

  • 相关阅读:
    高等教育心理学:学习心理(重要)
    SpringBoot系列(12):SpringBoot集成log4j2日志配置
    iOS系统暗黑模式
    Docker面试整理-Docker 常用命令
    【大型电商项目开发】线程池-异步(CompletableFuture)-48
    【华为OD机试python】拔河比赛【2023 B卷|100分】
    React 全栈体系(四)
    从“一时红”到“持久火”,“网红”农产品如何越向“长红”?
    Debian11安装Geoserver+矢量插件Vector Tiles
    dvwa靶机与web漏洞扫描(vega)
  • 原文地址:https://blog.csdn.net/jiu_yue_ya/article/details/134274885