int&和int是同一类型吗?如果我使用is_same<int,int&>::value我得到false但typeid(int).name() == typeid(int&).name()相同吗?
其次,同样的问题int和const int?
第三int和int*?
我可以理解是否int和int*不是因为一个实际上存储了另一个对象的地址并且工作方式不同,但我会认为int&并且int作为一个只是另一个的别名。
渴望得到一些好的评论。
int&和int是同一类型吗?如果我使用is_same<int,int&>::value我得到false但typeid(int).name() == typeid(int&).name()相同吗?
其次,同样的问题int和const int?
第三int和int*?
我可以理解是否int和int*不是因为一个实际上存储了另一个对象的地址并且工作方式不同,但我会认为int&并且int作为一个只是另一个的别名。
渴望得到一些好的评论。
来自 C++11 标准的第 5.2.7/4 段:
当 typeid 应用于 type-id 时,结果引用表示 type-id 类型的 std::type_info 对象。如果 type-id 的类型是对可能有 cv 限定的类型的引用,则 typeid 表达式的结果是指一个 std::type_info 对象,该对象表示 cv 无限定的引用类型。如果 type-id 的类型是类类型或对类类型的引用,则该类应是完全定义的。
因此,typeid(int)和typeid(int&)将给出相同的结果,尽管这两种类型肯定是不同的。同样,对于类型系统int和int const是不同的类型,但typeid操作符忽略了const限定。来自 C++11 标准的第 5.2.7/5 段:
泛左值表达式的顶级 cv 限定符或作为 typeid 操作数的 type-id 始终被忽略。
最后,intandint*又是类型系统的不同类型,typeid运算符为它们返回不同的结果。
类型限定符 (const和volatile) 创建不同的类型。 int是与 不同的类型const int。
引用、指针和数组也是如此。例如:
int, int&,int[10]和int*都是不同的类型。
Tstd::remove_reference<T>::type与ifT是一个引用不同的类型。
的<typeinfo>输出typeid(int).name()取决于平台,不必区分引用/非引用类型。但是,正如您通过.TT&type_traits
std::type_info::name没有提到身份。如果您坚持使用typeid来测试身份,请尝试以下操作:
assert(typeid(T) != typeid(U));
这是在对象上使用定义的相等比较运算符。type_info但要做好失望的准备:上述断言将因 §5.2.7/4 而T = int失败(参见 Andy 的分析器)。U = int&