При объявлении шаблонов функций используется синтаксис завершающего возвращаемого типа, если возвращаемый тип зависит от типа параметров.
При объявлении шаблонов функций используется синтаксис конечного возвращаемого типа, если возвращаемый тип зависит от типа параметров.
Когда возвращаемый тип шаблона зависит от типов параметров, использование синтаксиса завершающего возвращаемого типа значительно улучшает читаемость кода.
Например, для внеклассных определений методов использование синтаксиса завершающего возвращаемого типа означает, что нет необходимости использовать полный возвращаемый тип функции вместе с typename ключевое слово. Вместо явного указания полного типа возврата для aMethod в этом примере:
template <typename T>
class aClass {
public:
using vectorType = std::vector<T>;
vectorType aMethod(T const&);
};
//Difficult-to-read method definition
//Part in bold indicates fully qualified return type of method
template <typename T>
typename aClass<T>::vectorType aClass<T>::aMethod(T const &) {
};template <typename T>
class aClass {
public:
using vectorType = std::vector<T>;
vectorType aMethod(T const&);
};
template <typename T>
auto aClass<T>::aMethod(T const &) -> vectorType {
};Средство проверки помечает объявления шаблонов функций, где явно указанный тип возврата функции шаблона имеет ту же область, что и сама функция шаблона.
Например, в предыдущем примере функция aMethod имеет возвращаемый тип vectorType, который имеет ту же область применения, что и aMethod, а именно класс aClass<T>. Вместо явного указания полного возвращаемого типа можно использовать синтаксис конечного возвращаемого типа.
Поскольку C++ 14 включает вычет возвратного типа, можно использовать auto ключевое слово для объявления универсальных шаблонов при исключении конечного возвращаемого типа. В таких случаях Polyspace ® не вызывает нарушений.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Деклараторы |
| Категория: Обязательно, Автоматизировано |