比较两个 typeid 表达式是不是相等时出现编译器错误

Posted

技术标签:

【中文标题】比较两个 typeid 表达式是不是相等时出现编译器错误【英文标题】:Compiler error when comparing two typeid expressions for equality比较两个 typeid 表达式是否相等时出现编译器错误 【发布时间】:2017-09-11 23:31:32 【问题描述】:

关于这段来自培训视频的代码:

#include <iostream>

template<typename T>
struct MyStruct 
   T data;
;

int main(void)

   MyStruct<int> s;
   s.data = 2;
   assert(typeid(s.data) == typeid(int));

我得到这个编译器错误:

class_templates.cpp:12:26: error: invalid operands to binary expression ('const std::type_info' and 'const std::type_info')
   assert(typeid(s.data) == typeid(int));
          ~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~

编译:

clang++ -std=c++14 class_templates.cpp

编辑:如果我用 g++ 编译,我会得到一个更好的错误:

class_templates.cpp:14:20: error: must #include <typeinfo> before using typeid
    assert(typeid(s.data) == typeid(int));

【问题讨论】:

您必须使用#include &lt;typeinfo&gt; 才能使用typeid() @Remy Answers go down there -vvvvvvv @RemyLebeau 谢谢!这解决了它。你能把你的评论作为答案吗? Why do I need to #include <typeinfo> when using the typeid operator? 真的,两个接近投票和反对票? SO 有时会让人难以忍受。 【参考方案1】:

必须使用#include &lt;typeinfo&gt; 才能使用typeid(),否则您的程序格式错误。

另见:

Why do I need to #include <typeinfo> when using the typeid operator?

【讨论】:

以上是关于比较两个 typeid 表达式是不是相等时出现编译器错误的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 5th笔记(chap 19 特殊工具与技术)typeid

判断一个字符是不是相等,该如何表达

在 perl 中编译正则表达式时出现“reg_node overrun”

Scala判断字符串是不是相等

让 oracle 函数知道数据是不是为素数。收到警告:创建时出现编译错误的函数

java中如何比较两个数组确定是不是相等?