【C++】auto和decltype

1 auto关键字

C++中引入auto类型说明符,让编译器去识别表达式所属的类型。例如:

  1. 推导基本类型

    auto i = 42;           // 推导为 int 类型
    auto d = 3.1415926535; // 推导为 double 类型
    auto b = true;         // 推导为 bool 类型
    
  2. 推导STL容器类型

    vector<int> v = {1, 2, 3, 4, 5};
    auto it = v.begin();   // 推导为 vector<int>::iterator 类型
    auto val = v[2];       // 推导为 int 类型
    
  3. 推导函数返回值类型、

    auto add(int a, int b) {
        return a + b;
    }
    auto result = add(1, 2);  // 推导为 int 类型
    

1.1 auto使用注意问题

  • auto声明的变量必须初始化,具有初始值

  • auto不能作为函数参数

    void func(auto x, auto y);   //错误
    
  • 不能用来声明数组

    int arr1[3]={1,2,3};
    auto arr2[3]={1,2,3};    //错误,不能用来声明数组
    
  • 对象属性不能用auto定义,也不能用于定义非静态成员变量

  • auto无法推导出模板参数

  • 当在一行中定义多个变量并使用auto推导它们的类型时,编译器会确保每个变量的推导结果不产生二义性。

     auto x = 42, y = 3.14;  // 错误!二义性的初始化
     
     auto x = 42;
     auto y = 3.14;  // 正确!明确的类型推导
    

2 decltype关键字

decltype用于获取表达式的类型,并将其作为变量或函数返回类型的一部分。例如:

  1. 推导变量类型
    int x = 42;
    decltype(x) y;         // 推导为 int 类型
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值