c++ typeid(x).name()产生'y',这是什么意思?

rnmwe5a2  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(147)

在下面的代码中,我们得到:
124
是的
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';
}

字符串
我试图找到与数据类型名称的关联,但没有匹配的

jq6vz3qz

jq6vz3qz1#

我试图找到与数据类型名称的关联,但没有匹配的
你的编译器将std::size_t命名为y,我的编译器将其命名为m,两者都是正确的,完全允许这样做。根据:https://en.cppreference.com/w/cpp/types/type_info/name
一些实现(如MSVC、IBM、Oracle)会产生人类可读的类型名称。其他的,最明显的是gcc和clang,返回由Itanium C++ ABI指定的损坏的名称。可以使用特定于实现的API(如abi::__cxa_demangle)直接或通过boost::core::demangle将损坏的名称转换为人类可读的形式。它也可以通过命令行实用程序c++filt -t进行管道传输。
alignof返回size_t,参见here
使用Boost的demangling示例:https://godbolt.org/z/8959KdMhv

相关问题