【发布时间】:2016-12-11 14:31:17
【问题描述】:
为什么下面的例子:
#include <iostream>
#include <typeinfo>
template<typename T>
void fun(const T& param)
{
std::cout << "T = " << typeid(T).name() << std::endl;
std::cout << "param = " << typeid(param).name() << std::endl;
std::cout << (typeid(T)==typeid(param)) << std::endl;
}
int main(int, char**)
{
fun(1);
}
给出以下输出:
T is i
param is i
1
我知道type_info::name() 的行为取决于实现。无论如何,我希望operator== 返回false(因为param 是一个常量引用而不是整数)。
【问题讨论】:
-
在您的代码中使用
==,但在您的问题中使用!=。澄清。 -
typeid忽略顶级限定符(包括引用)。 -
抱歉,已修复
-
你期待输出
int吗?如果是这样,fine print:filter through c++filt -t if using gcc or similar. -
我应该更准确地说:
typeid可以应用于类型或表达式(就像sizeof)。表达式param的类型为const T(请记住,表达式是值,从不引用)。而typeid会忽略顶级 cv 限定符。