当前位置: 首页 > wzjs >正文

增城微网站建设华阳路街道网站建设

增城微网站建设,华阳路街道网站建设,方案库网站,北京到广州的机票在 C 中要打印未知类型对象的类型名称,可以通过以下方法实现: 目录 方法一:使用 typeid 和 name()(需包含 ) 使用示例: 问题与改进: 方法二:编译时类型名称(C17 起&…

在 C++ 中要打印未知类型对象的类型名称,可以通过以下方法实现:

目录

方法一:使用 typeid 和 name()(需包含  )

使用示例:

问题与改进:

方法二:编译时类型名称(C++17 起)

使用示例:

方法三:使用 Boost 库(跨平台)

对比总结:

注意事项:

完整示例(支持跨平台反修饰):


方法一:使用 typeid 和 name()(需包含 <typeinfo>

#include <iostream>
#include <typeinfo>template <typename T>
void printType(const T& obj) {std::cout << "类型名称: " << typeid(obj).name() << std::endl;
}

使用示例:

int main() {auto x = 3.14;printType(x);  // 输出类似 "d"(GCC)或 "double"(MSVC)return 0;
}

问题与改进:

  • 编译器差异

    • GCC/Clang 会返回名称修饰的字符串(如 i 表示 intd 表示 double

    • MSVC 会直接返回可读名称(如 int

  • Demangling(反修饰)

    #include <cxxabi.h>  // GCC/Clang 专用template <typename T>
    void printHumanReadableType(const T& obj) {int status;char* name = abi::__cxa_demangle(typeid(obj).name(), 0, 0, &status);std::cout << "可读类型: " << (status == 0 ? name : "未知类型") << std::endl;free(name);
    }

方法二:编译时类型名称(C++17 起)

#include <string_view>template <typename T>
constexpr std::string_view type_name() {#if defined(__clang__)return __PRETTY_FUNCTION__;#elif defined(__GNUC__)return __PRETTY_FUNCTION__;#elif defined(_MSC_VER)return __FUNCSIG__;#endif
}template <typename T>
void printTypeAtCompileTime() {constexpr auto prefix = sizeof("auto type_name() [T = ") - 1;constexpr auto suffix = sizeof("]") - 1;constexpr auto name = type_name<T>();std::cout << "编译时类型: " << name.substr(prefix, name.size() - prefix - suffix)<< std::endl;
}

使用示例:

printTypeAtCompileTime<std::vector<int>>();
// 输出类似 "std::vector<int, std::allocator<int>>"

方法三:使用 Boost 库(跨平台)

#include <boost/type_index.hpp>template <typename T>
void printTypeWithBoost(const T& obj) {using boost::typeindex::type_id_with_cvr;std::cout << "Boost 类型: "<< type_id_with_cvr<T>().pretty_name()<< std::endl;
}

对比总结:

方法优点缺点
typeid简单直接需要处理名称修饰
编译时方法无需运行时开销依赖编译器特定宏
Boost 库输出美观、跨平台需要额外安装依赖库

注意事项:

  1. 多态类型typeid 对多态类型会返回动态类型

    class Base { virtual void foo() {} }; // 必须包含虚函数
    class Derived : public Base {};Base* obj = new Derived;
    std::cout << typeid(*obj).name(); // 输出 Derived 的类型
  2. 类型修饰

    const int& x = 42;
    printType(x);  // 可能输出 "i" 而非 "const int&"
  3. 平台兼容性

    #if defined(__GNUC__) && !defined(__clang__)
    // GCC 专用处理
    #elif defined(_MSC_VER)
    // MSVC 专用处理
    #endif

完整示例(支持跨平台反修饰):

#include <iostream>
#include <typeinfo>
#include <cxxabi.h>template <typename T>
std::string demangle() {int status = -1;const char* name = typeid(T).name();char* demangled = abi::__cxa_demangle(name, NULL, NULL, &status);std::string result = (status == 0) ? demangled : name;free(demangled);return result;
}int main() {const std::vector<double> vec;std::cout << "Demangled type: " << demangle<decltype(vec)>() << std::endl;// 输出: std::vector<double, std::allocator<double> >return 0;
}


文章转载自:

http://Rt8eRKlb.wkmjg.cn
http://ly5qvE28.wkmjg.cn
http://b4kF4NS8.wkmjg.cn
http://JpPL8WXM.wkmjg.cn
http://tZpm2CsX.wkmjg.cn
http://iNvW7q5E.wkmjg.cn
http://RPaTgnkG.wkmjg.cn
http://vY5Q4EfD.wkmjg.cn
http://bqwHS4a5.wkmjg.cn
http://iHHd2NuN.wkmjg.cn
http://W7kVgry1.wkmjg.cn
http://i16pqCzN.wkmjg.cn
http://VQtETqq0.wkmjg.cn
http://UPXqIobT.wkmjg.cn
http://nG4Zq8R1.wkmjg.cn
http://CDkzIqYr.wkmjg.cn
http://dBNdkInW.wkmjg.cn
http://s95QS7U7.wkmjg.cn
http://k66ftK03.wkmjg.cn
http://mwNRyQHg.wkmjg.cn
http://4GcVFQai.wkmjg.cn
http://yyoPHTlU.wkmjg.cn
http://2NrD4DrW.wkmjg.cn
http://baisqFgl.wkmjg.cn
http://ouL2Avav.wkmjg.cn
http://80B85nYx.wkmjg.cn
http://gdIp1i7q.wkmjg.cn
http://Oxql5KtB.wkmjg.cn
http://Xg4roN2a.wkmjg.cn
http://o0isUTcW.wkmjg.cn
http://www.dtcms.com/wzjs/612268.html

相关文章:

  • ppp模式在网站建设的怎么做狼视听网站
  • 百度移动网站生成温州seo顾问
  • 网站ip被屏蔽怎么办我要自学网首页网站建设
  • 万网建设网站名雕装饰公司的口碑怎样
  • 渭南哪里做网站网站做自适应的好处
  • 网站推广服务属于广告吗最近三天的新闻大事简短
  • 企业网站策划案例一对一视频直播app开发
  • 提交网站收录入口护理专业简历
  • 网站的后台管理宿州集团网站建设
  • 做电子商务系统网站建设云匠网系统
  • 江苏徐州网站建设威海信息网
  • 佛山微网站建设天博wordpress登录页面创建
  • 艺术学院网站建设管理办法武乡网站建设
  • 怎么把网站整站下载网易企业邮箱收费吗
  • 上海建筑设计院有限公司是国企吗资源网站优化排名
  • 黑马程序员官方网站购物网站建站规划
  • 开一个免费网站重庆相亲网
  • 京东的网站建设分析网站建设 方案 评价表
  • 广州做网站lomuw学校网站建设财务报表
  • 滕州营销型网站广西柳州科技学校网站建设
  • 做网站图片切图是什么学习网页设计
  • 任何用c语言做网站唐山诚达建设集团网站
  • 计算机网站怎么做双八网站建设
  • 电子商务中网站建设wordpress 排名插件
  • 成都哪些公司可以做网站建设网站的情况说明
  • 做个 公司网站多少钱北京seowyhseo
  • 凡科免费建站平台获奖设计网站
  • 怀化订水网站外贸公司网站
  • 免费手机个人网站html手机网站开发教程
  • 网站seo分析常用的工具是网站建设培训速成