1.C++类型推断

auto

  • C++中auto用于定义变量时自动推断数据类型
  • 所以使用auto定义的变量必须拥有初始值
  • auto将忽略顶层const1,保留底层const2
    int main(){
    
        const int * const p_1 = new int(0);
    	
    	/*
    		虽然p_1既有顶层const,也有底层const
        	但p_2只保留底层const
        	下面的语句等价	const int *p2 = p_1;
        */
        auto p_2 = p_1;
        p_2 = new int(0);
    
    	//手动管理内存不要忘了释放的好习惯
        delete p_1;
        delete p_2;
    
        return 0;
    }
    
  • 通过auto,还可以实现函数返回值的类型推断
  • C++11增加了尾指返回类型,其基本格式如下
    auto func(agrs) -> ret_type{}
    
  • C++14增加了返回类型自动推断,其基本格式如下;但函数中所有return的返回值类型必须一致(不会进行隐式类型转换)
    auto func(args){}
    

decltype

  • decltype(expression)用于获取表达式的静态类型,其并不会实际执行表达式
  • 如果表达式是对指针的解引用,其获取引用类型
  • 如果表达式是加上括号的变量,其获取引用类型
    int call(){
    
        cout << "hello";
        return 0;
    }
    
    int main(){
    
        //并不会调用call(),直接解析call的返回值类型
        decltype(call()) data_1 = 0;
    
        //data_1++表达式返回一个int数值
        decltype(data_1++) data_2 = 0;
    
        //++data_1表达式得到的是一个int引用
        decltype(++data_1) ref_1 = data_1;
    
        //加上括号的变量得到引用类型
        decltype((data_1)) ref_2 = data_1;
    
        //指针的解引用得到引用类型
        int *p = &data_1;
        decltype(*p) ref_3 = data_1;
    
        return 0;
    }
    

typeid

  • typeid(expression用于获取表达式的动态类型信息,其返回一个type_info类型的常量对象
  • 其也不会真正执行表达式
  • 下面给出typeinfo中常用的成员函数
    #include <typeinfo>
    
    class type_info
    {
    	...
    public:
       	/*
       		@return
       			描述类型名字的C风格字符串
       			不同编译器对同一个类型的返回结果可能有所不同
       	*/
       	const char *name() const;
       	
       	/*
       		@todo
       			重载 == 运算符
       			判断两个type_info对象的类型名是否相同
       	*/
       	bool operator==(const type_info& __arg) const;
       	...
    };
    

结语

  • 有任何错误评论区指正,共同进步

  1. 如果const修饰指针本身,称其为顶层const,如int *const p ↩︎

  2. 如果const修饰指针指向的类型,称其为底层const,如const int *p ↩︎

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值