C ++ статическая локальная функция против глобальной функции

  • add_cv_t<T> и const volatile T
  • add_const_t<T> и const T
  • add_volatile_t<T> и volatile T

Нет разницы; определение add_const<T>::type является, например, только T const.

  • add_lvalue_reference_t<T> и T&
  • add_rvalue_reference_t<T> и T&&

T& и T&& плохо сформированы, когда T - cv void, но эти шаблоны хорошо сформированы,

  • add_pointer_t<T> и T*?

add_pointer_t<T> эквивалентно std::remove_reference<T>::type*. То есть, если T является ссылочным типом, он дает указатель на ссылочный тип. С другой стороны, T* будет плохо сформирован, так как вы не можете иметь указатель на ссылку.

Что вы должны использовать?

  • В общем, псевдоним шаблоны могут использоваться для предотвращения вычета T. Конечно, это означает, что если вы хотите дедукции, вы должны избегать их.
  • Шаблоны псевдонимов могут использоваться в качестве аргументов шаблона шаблона для шаблона, который принимает преобразование типа в качестве параметра.
  • Шаблоны псевдонимов, которые отличаются поведением от альтернатив, таких как T*, полезны в общем коде, поскольку они «делают правильные вещи». Например, если T выводится из аргумента типа T&&, тогда T* делает неправильную вещь, когда аргумент является lvalue, поскольку он пытается объявить указатель на ссылку lvalue. Но std::add_pointer_t<T> даст указатель на фактический тип аргумента.
30
задан Arun 7 February 2013 в 02:45
поделиться