gpt4 book ai didi

c++ - 如何确定 std::type_index 是否对我的编译器是唯一的?

转载 作者:可可西里 更新时间:2023-11-01 17:54:20 28 4
gpt4 key购买 nike

标准是否规定 std::type_index(typeid(obj)) 的调用对于该类型是唯一的?我找不到这方面的信息。从 type_info::name() 我得到了这个:

Returns an implementation defined null-terminated character string containing the name of the type. No guarantees are given, in particular, the returned string can be identical for several types and change between invocations of the same program.

(来源:http://en.cppreference.com/w/cpp/types/type_info/name)

这让我相信,也许错位的名称/typeids 不一定是唯一的。然而 std::type_index 的页面特别使用假设这些类型在其“usage example”中是唯一的。

那么我如何知道我的编译器的 typeid 是否唯一,以及发生冲突的可能性有多大?此外,是否有任何方法可以获取某种类型的标识符(无论是字符串还是其他),我们可以知道该类型是唯一的?

分解不是一个选项,因为它对于非常大的类型来说太慢了,但我的猜测是,如果实现提供了一个分解名称的工具,那么 mangled 名称应该是唯一的无论如何都要输入那个实现,对吗?

最佳答案

type_info 上的name 函数不保证有用。一个实现可能会为所有内容返回 "" 并且是兼容的。实际上它并不总是"",它可以用于调试,但仅此而已。

但是,type_info ==beforehash_code 不依赖于 name.

type_index 是指向 type_info 的指针的包装器,它使用信息的方法来生成常规类型(可以复制、存储等)。它对于不同的类型是不同的。


现在,在实践中,问题是在某些 C++ 平台上,两个具有完全相同类型(但不是从一个导出)的不同动态库具有不同的 type_info 但相同的 .name().

可能希望它们具有相同的名称,或者您可能希望比较 type_info。

都是问题。

关于c++ - 如何确定 std::type_index 是否对我的编译器是唯一的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26794944/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com