C++学习笔记3--auto、typeid、decltype使用

1. auto使用

C++11新增了一个工具,让编译器可以根据初始值的类型推断变量的类型,为此它重新定义了auto的含义。

#include<iostream>
#include<stdlib.h>
//自动变量,自动获取类型,输出,泛型

void main()
{
    auto num = 10;//自动变量,自动匹配类型
    auto numA = 10/3.0;
    std::cout << num <<"     " << numA << std::endl;
    system("pause");


}

这里写图片描述

另外auto变量还可以自动循环一维数组,而且和类型无关,具有泛型编程的思想。

#include<iostream>
#include<stdlib.h>
//自动变量,可以实现自动循环一维数组
//自动循环的时候,对应的必须是常量

void main()
{
    int num[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    // double num[10] = { 1.0, 2.0, 3.0, 4.5, 5, 6, 7, 8, 9, 10 };
    //num数组名是一个指针常量
    //auto 自动循环 begin  endl;,必须是一个数组的常量
    //
    for (auto data : num)//泛型C++语法,循环一维数组,常量
    {
        std::cout << data<<std::endl;

    }
    system("pause");


}

这里写图片描述

2. typeid的使用

typeid是C++的关键字之一,等同于sizeof这类的操作符。typeid操作符的返回结果是名为type_info的标准库类型的对象的引用。

我们可以利用typeid来获取一个变量的类型,更加详细的解释可以参考这两篇文章, typeid详解,    知乎: typeid如何得出变量的类型?

示例代码

#include<iostream>
#include<stdlib.h>

int main()
{
    double a(10.9);
    double * p(&a);
    auto b(p);  // 使用auto变量可以通用传入接口
    std::cout << typeid(a).name() << std::endl;  
    std::cout << typeid(p).name() << std::endl;
    std::cout << typeid(b).name() << std::endl;  // 使用typeid可以利用name()获取我们的变量的类型
    system("pause");
    return 0;
}

输出:
这里写图片描述

3. decltype使用

有的时候我们还会遇到这种情况,我们希望从表达式中推断出要定义变量的类型,但却不想用表达式的值去初始化变量。还有可能是函数的返回类型为某表达式的的值类型。在这些时候auto显得就无力了,所以C++11又引入了第二种类型说明符decltype,它的作用是选择并返回操作数的数据类型。在此过程中,编译器只是分析表达式并得到它的类型,却不进行实际的计算表达式的值。

#include<iostream>
#include<stdlib.h>

int main()
{
    double a(10.9);
    double * p(&a);
    auto b(p);  // 使用auto变量可以通用传入接口
    std::cout << typeid(a).name() << std::endl;  
    std::cout << typeid(p).name() << std::endl;
    std::cout << typeid(b).name() << std::endl;  // 使用typeid可以利用name()获取我们的变量的类型
    decltype(a) d_b(12.9);   // decltype可以通用的备份接口,自动创建指定的类型名字
    decltype(p) d_p(&a);   //比如我们可以通过decltype来创建一个类型名字。
    system("pause");
    return 0;
}

后记, 目前自己学习C++学习只是停留在知道这个东西,但是很多内部的原理还不是很清楚,在之后的学习过程中多总结。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值