Мне было интересно, имеет ли смысл использовать std::forward<>
при отправке экземпляра в typeid
?Имеет ли смысл использовать std :: forward с оператором typeid?
template <typename T>
void foo(T&& value) {
std::cout << typeid(std::forward<T>(value)).name() << std::endl;
}
ли применение typeid(value)
вместо дает тот же результат?
Почему это имеет смысл? Почему бы вам просто не попытаться скомпилировать его? –
@JonathanWakely Просто компиляция показывает, что существует много случаев, когда использование 'std :: forward' дает тот же результат, что и не его использование, но не может быть окончательно доказано, что он даст тот же результат во всех случаях. – hvd
Итак, вы пишете шаблон функции, подобный приведенному выше, и набрасываете на него нагрузку типов. Несколько встроенных типов, нетривиальный тип класса, указатель и т. Д., И вы можете получить довольно хорошую идею. Первый вопрос остается, почему это имеет смысл? 'typeid' не является функцией, он не копирует свой операнд. Кроме того, он существовал в C++ 03, когда 'forward' не существовал, поэтому очевидно, что' forward' не требуется, чтобы дать ему правильный ответ. –