将 std::forward 与 typeid 运算符一起使用是否有意义

Does it make sense to use std::forward with the typeid operator?

本文关键字:是否 一起 有意义 typeid std forward 运算符      更新时间:2023-10-16

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

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

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

From [expr.typeid]/3:

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

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

不,它没有。无论哪种方式,结果都是一样的。