如果这篇博客帮助到你,可以请我喝一杯咖啡~
CC BY 4.0 (除特别声明或转载文章外)
零 如何打印出一个变量的类型
1、typeid(variable).name()
int main()
{
string s = "123";
const string &rs = s;
cout << typeid(s).name() << " " << typeid(rs).name() << endl;
return 0;
}
使用 typeid
我们查看输出的结果为:
NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
这是变量类型经过 mangling
后的结果,可以通过 c++filt -t
命令得到真实的类型:
c++filt -t NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >
发现 s
和 rs
被解释为同种类型!
2. 借助 __PRETTY_FUNCTION__
__PRETTY_FUNCTION__
可以用来打印函数签名(gcc),msvc 则为 __FUNCSIG__