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

1. 引入头文件#include

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

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

示例

// gettype.c
#include 
#include 

using namespace std;

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

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

输出

使用typeid.name获取auto变量的类型_第1张图片


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


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

addressbook.proto

Protobuf学习 - 入门

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

使用typeid.name获取auto变量的类型_第2张图片

最后一行输出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);

你可能感兴趣的:(编程经验)