使用typeid.name获取auto变量的类型

1. 引入头文件#include <typeinfo>

2. 调用typeid(auto_type_var).name()获取名称

其中typeid操作符得到type_info对象,创建type_info对象的唯一方法是使用typeid操作符

示例

// gettype.c
#include <iostream>
#include <typeinfo>

using namespace std;

int main()
{
        auto i=100;
        cout << typeid(i).name() << endl;
        return 0;
}

编译 g++ -std=c++11 gettype.c -o gettype

输出



本人在protobuf生成的嵌套类型中由于没有g++ 加上-std=c++11参数导致编译报错,后来通过以上方法找到了auto的实际类型,再后来发现   加上-std=c++11参数就能仍旧使用auto关键词类型推断了


proto文件用到的是以下文档的例子

addressbook.proto

Protobuf学习 - 入门

https://www.cnblogs.com/autyinjing/p/6495103.html


最后一行输出auto变量的类型,容易推断出为 addressbook::Person::PhoneNumber*

注: name函数为type_info对象所表示的类型的名字返回C风格字符串。给定类型所用的值取决于编译器,具体来说无须与程序中使用的类型名字匹配。对name返回值的唯一保证是,它为每个类型返回唯一的字符串。【摘自C++ Primer中文版652页】

既 auto help_pn = help_pi.mutable_phone(i);

等价于
addressbook::Person::PhoneNumber* help_pn = help_pi.mutable_phone(i);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值