在下面的代码中,我们得到:
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';
}
字符串
我试图找到与数据类型名称的关联,但没有匹配的
1条答案
按热度按时间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的