Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么std::type_info不可复制?我可以把它存放在什么地方吗?_C++_Std_Typeid_Typeinfo - Fatal编程技术网

C++ 为什么std::type_info不可复制?我可以把它存放在什么地方吗?

C++ 为什么std::type_info不可复制?我可以把它存放在什么地方吗?,c++,std,typeid,typeinfo,C++,Std,Typeid,Typeinfo,std::type_info类是不可复制的。这使得它很难存储在对象中供以后使用。我该怎么办?您可以存储指向常量std::type_info对象的指针。来自和: type\u info类描述在 由编译器编写的程序。此类的对象有效地存储 指向类型名称的指针。type_info类还存储 适于比较两种类型是否相等或相等的编码值 排序顺序。类型的编码规则和排序顺序 未指定,不同程序之间可能有所不同 在C++11中有一个更好的解决方案。一个名为std::type_index的新的可复制包装器。你需要包括标题

std::type_info
类是不可复制的。这使得它很难存储在对象中供以后使用。我该怎么办?

您可以存储指向常量
std::type_info
对象的指针。

来自和:

type\u info
类描述在 由编译器编写的程序。此类的对象有效地存储 指向类型名称的指针。
type_info
类还存储 适于比较两种类型是否相等或相等的编码值 排序顺序。类型的编码规则和排序顺序 未指定,不同程序之间可能有所不同


在C++11中有一个更好的解决方案。一个名为std::type_index的新的可复制包装器。你需要包括标题“Type Currand”来使用它。

参见现代C++设计。Andrei Alexandrescu实现了类似的事情,并在书中进行了讨论
typeid(id)
不是临时的:它是一个具有静态存储持续时间的对象。
type_info
对象一直存在,直到程序终止。这就是为什么这里的
常量&
有效。您对通过引用临时延长生命周期的理解是错误的。(不过巧合的是,它之所以有效是因为@James说了什么。)@GMan,请解释一下为什么它错了。@StackedCrooked:只有当引用具有自动存储持续时间(即,它在函数中声明和初始化)时,生命期才会延长。我不知道typeid(t)返回了对静态对象的引用。那就容易多了。那么为什么std::type_info是不可复制的呢?(见问题标题)我改变了我的答案,因为今天
std::type_index
是我的选择。没有怨恨:)@StackedCrooked:没问题,4年的解决方案肯定不再是解决方案;)他的问题不是关于
type\u info
是什么。@gmannick你是对的,但是@AlexendreC.的答案中遗漏了一些引用(例如,为什么指向
type\u info
的指针在应用程序生命周期内仍然有效?)