C++中typeid获取函数类型输出FficE,E的含义求解
解析g++中
typeid(myFun)返回的FficE编码含义 你看到的FficE是g遵循**Itanium C ABI**标准生成的类型编码,各字符的具体含义如下:
F:标记这是一个函数类型(Function)f:函数的返回类型为floati:第一个参数类型为intc:第二个参数类型为charE:函数类型定义的结束标记(End of function type)
编码规则细节
在Itanium C++ ABI的类型编码规范中,函数类型的格式固定为:F<返回类型><参数类型列表>E
其中E用来明确闭合函数类型的定义,防止类型编码串出现歧义——比如如果后续还有嵌套的类型定义,E能清晰区分当前函数类型的边界。
举个验证例子:如果定义一个无参数的float返回函数
float noArgFun() { return 0.0f; }
用g++编译后,typeid(noArgFun).name()会返回FfE,正好符合F[返回类型]E的格式,能直观看到E的作用。
需要注意的是,C标准并未规定std::type_info::name()的具体输出格式,该返回值完全由编译器实现决定。只有g、clang等遵循Itanium ABI的编译器会使用这套编码规则,其他编译器(如MSVC)会输出更易读的字符串(比如float (__cdecl*)(int,char))。
内容的提问来源于stack exchange,提问作者boredAndDesperate25
相关产品推荐
相关产品推荐

