auto和decltype

本文详细介绍了C++中的auto关键字和decltype的功能及其使用注意事项。通过实例展示了如何利用auto进行类型推导,以及decltype如何从变量或表达式中获取类型。此外,还探讨了auto与decltype在函数模板中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. auto的作用:

2. auto使用时的注意点

3. decltype 的作用

4. auto和decltype配合使用,实现追踪返回类型


1. auto的作用:

        auto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。从这个意义上讲,auto并非一种“类型”声明,而是一个类型声明时的“占位符”,编译器在编译时期会将auto替换为变量实际的类型。

2. auto使用时的注意点

        <1>. 使用auto定义变量时,必须初始化

        <2>. VS不支持在函数参数列表中使用auto,QT中支持

        <3>.  auto变量不能作为自定义类型的成员变量

struct TEST
{
    int a;
    auto b; //错误,编译不过
    auto c = 10; //错误,哪怕初始化了也编译不过
};

        <4>. auto不能用于数组

auto a[3] = {1, 2, 3}; //错误,哪怕初始化也编译不过

        <5>. 模板实例化对象的类型不能是 auto类型

vector<int> a = {1, 2, 3}; //可以
vector<auto> b = {1, 2, 3}; //错误,哪怕初始化了也编译不过

3. decltype 的作用

        decltype实际上有点像auto的反函数, auto可以让你声明一个变量,而decltype则可以从一个变量或表达式中得到其类型。根据decltype获得的类型,可以定义新的该类型变量

    int i;
    decltype(i) j = 0;
    cout << typeid(j).name() << endl;   // 打印出"i", g++表示integer

    float a;
    double b;
    decltype(a + b) c;
    cout << typeid(c).name() << endl;   // 打印出"d", g++表示double

    vector<int> vec;
    typedef decltype(vec.begin()) vectype; // decltype(vec.begin()) 改名为 vectype

    vectype k;  
    //decltype(vec.begin()) k;  
    for (k = vec.begin(); k < vec.end(); k++)
    {
        // 做一些事情
    }

        可以使用 typeid(a).name()来显示变量a的型别;

4. auto和decltype配合使用,实现追踪返回类型

        追踪返回类型用于函数模板中,根据函数运算结果推导函数返回值类型。 

在泛型编程中,函数中参数的型别不定,如果函数返回值型别是函数参数运算后得到,那会导致函数的返回值型别不定,无法在函数声明时指定函数返回值。所以,使用auto和decltype来实现追踪返回类型;在函数名和参数列表后面指定返回类型;

template <typename T1, typename T2>
auto func( T1& t1, T2& t2) -> decltype( t1*t2 )
{
    return t1*t2;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值