typeid(x).name() 返回 ‘y’,这是什么意思?

huangapple go评论109阅读模式
英文:

typeid(x).name() yields 'y', what does it mean?

问题

在下面的代码中,我们得到:
12 4
y
typeid().name应该返回数据类型,
但我找不到'y'代表哪种数据类型 🤔

void alignment()
{
    struct Foo
    {
        int   i;
        float f;
        char  c;
    };

    std::cout << sizeof(Foo) << '\t' << alignof(Foo) << '\n';
    auto x = alignof(Foo);
    std::cout << typeid(x).name() << '\n';
}

我尝试查找与数据类型名称的关联,但没有找到匹配的内容。

英文:

In Code below, we get:
12 4
y
typeid().name should return data type,
but I cannot find which data type 'y' means 🤔

void alignment()
{
    struct Foo
    {
        int   i;
        float f;
        char  c;
    };

    std::cout &lt;&lt; sizeof(Foo) &lt;&lt; &#39;\t&#39; &lt;&lt; alignof(Foo) &lt;&lt; &#39;\n&#39;;
    auto x = alignof(Foo);
    std::cout &lt;&lt; typeid(x).name() &lt;&lt; &#39;\n&#39;;
}

I tried to find an association with data type names but nothing fits

答案1

得分: 3

我尝试找到与数据类型名称相关的关联,但没有找到合适的。

您的编译器将std::size_t命名为y,而我的编译器将其命名为m,这两者都是正确的,完全允许的。
根据:
https://en.cppreference.com/w/cpp/types/type_info/name

一些实现(如MSVC、IBM、Oracle)生成人类可读的类型名称。其他一些实现,尤其是gcc和clang,返回被Itanium C++ ABI规定的mangled名称。可以使用特定于实现的API(例如abi::__cxa_demangle)或通过boost::core::demangle来将mangled名称转换为人类可读形式。也可以通过命令行实用程序c++filt -t来传递它。

alignof返回size_t,请参阅这里

使用Boost进行解缠示例:
https://godbolt.org/z/8959KdMhv

英文:

> I tried to find an association with data type names but nothing fits

Your compiler gave std::size_t name y, mine called it m, both are right and fully allowed to.
According to:
https://en.cppreference.com/w/cpp/types/type_info/name

> Some implementations (such as MSVC, IBM, Oracle) produce a human-readable type name. Others, most notably gcc and clang, return the mangled name, which is specified by the Itanium C++ ABI. The mangled name can be converted to human-readable form using implementation-specific API such as abi::__cxa_demangle directly or through boost::core::demangle. It can also be piped through the command-line utility c++filt -t.

And alignof returns size_t, see here.

Example with demangling that using Boost:
https://godbolt.org/z/8959KdMhv

huangapple
  • 本文由 发表于 2023年8月5日 12:40:02
  • 转载请务必保留本文链接:https://go.coder-hub.com/76840155.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定