1. 引入头文件#include typeinfo 2. 调用typeid(auto_type_var).name()获取名称 其中typeid操作符得到type_info对象,创建type_info对象的唯一方法是使用typeid操作符 示例 // gettype.c #include iostream#include ty
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);