Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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++ C++;:在生产代码中使用typeid_C++_Typeid - Fatal编程技术网

C++ C++;:在生产代码中使用typeid

C++ C++;:在生产代码中使用typeid,c++,typeid,C++,Typeid,在生产代码中使用typeid通常被认为是不好的做法吗?另外,我注意到typeid返回type\u info,其中包含一些元数据(例如带有类型名称的字符串);有没有办法停用这个 很难说特定语言功能的使用是“坏”还是“好”。这实际上取决于你如何使用它。如果使用typeid是工作的正确工具,那么使用它本身并没有什么错,但是如果您正在解决的任何问题都有更好的解决方案,那么您应该避免使用typeid,而使用更好的解决方案 使用typeid通常不是一个好主意,因为它的使用通常可以通过使用继承和虚拟函数来避免

在生产代码中使用
typeid
通常被认为是不好的做法吗?另外,我注意到
typeid
返回
type\u info
,其中包含一些元数据(例如带有类型名称的字符串);有没有办法停用这个

很难说特定语言功能的使用是“坏”还是“好”。这实际上取决于你如何使用它。如果使用
typeid
是工作的正确工具,那么使用它本身并没有什么错,但是如果您正在解决的任何问题都有更好的解决方案,那么您应该避免使用
typeid
,而使用更好的解决方案

使用
typeid
通常不是一个好主意,因为它的使用通常可以通过使用继承和虚拟函数来避免。如果您可以用这种方式更新您的系统,那么这样做可能是一个好主意

至于是否可以让
typeid
避免返回
std::type_info
,这应该不会导致任何性能问题
typeid
的计算结果为
const std::type\u info&
,因此它不会深度复制它包含的任何字符串信息。大多数实现都将实际的
std::type_info
对象存储在对象的虚拟函数表中,因此不会在内部进行复制

  • 取决于你对typeid做了什么。如果您使用的是应该使用多态性的地方,那么这当然是不好的。然而,将跟踪或类似的东西转储到客户的机器上进行调试是很好的
  • 唯一的方法是在编译器上禁用RTTI。没有标准的方法来做这件事。注意,这也将禁用
    dynamic\u cast

  • 您可能不想从库调用返回
    typeid
    引用。您最好编写一个函数,将
    typeid
    转换为其他对象,例如
    int
    ,在这里您可以控制映射。此外,也不能保证
    typeid
    在不同版本的编译器中保持不变。这也意味着您不想将
    typeid
    存储在磁盘上,除非是在运行之间未保留的缓存文件中。