使用stid :: forward和typeid运算符是否有意义?

时间:2014-11-20 10:30:33

标签: c++ c++11 rtti perfect-forwarding

我想知道在向std::forward<>提交实例时使用typeid是否有意义?

template <typename T>
void foo(T&& value) {
  std::cout << typeid(std::forward<T>(value)).name() << std::endl;
}

调用typeid(value)会产生相同的结果吗?

2 个答案:

答案 0 :(得分:5)

来自 [expr.typeid] / 3:

  

typeid应用于多态类类型的glvalue以外的表达式时,结果引用表示表达式的静态类型的std::type_info对象。

在C ++标准中,“表达式的类型”绝不是引用类型;表达式的“reference-ness”(左值或右值引用)以其值类别表示。由于std::forward不会修改表达式的类型,只会修改其值类别(例如从左值到右值),因此应用std::forward不会影响typeid的结果。

答案 1 :(得分:3)

不,它没有。结果将是相同的两种方式。