Jump to content

Тип скользящего возвращаемого значения

В компьютерном программировании подпрограмма ) (она же функция часто информирует вызывающий код о результате своего вычисления, возвращая значение этому вызывающему коду. Тип данных значения функции этого значения называется типом возвращаемого .

В языке программирования C++ функция должна быть объявлена. Тип возвращаемого значения функции C++ указывается как часть объявления этой функции. [ 1 ] Завершающий тип возвращаемого значения — функция синтаксиса, доступная начиная с C++11 , — похож на традиционный тип возвращаемого значения, за исключением того, что он указан в другом месте. [ 2 ] [ 3 ] [ 4 ]

Синтаксис

[ редактировать ]

Перед именем функции указывается обычный тип возвращаемого значения. В этом примере традиционного кода C++ тип возвращаемого значения HasMultipleItems() является bool:

class CClass {
public:
    bool HasMultipleItems();
    std::vector<int> m_veciMember;
};

bool CClass::HasMultipleItems() {
    return m_veciMember.size() > 1;
}

Завершающий тип возвращаемого значения указывается после списка параметров, после -> символы:

class CClass {
public:
    auto HasMultipleItems() -> bool;
    std::vector<int> m_veciMember;
};

auto CClass::HasMultipleItems() -> bool {
    return m_veciMember.size() > 1;
}

Отличие от других особенностей языка

[ редактировать ]

В современном C++ значение auto ключевое слово будет зависеть от его контекста:

  • При использовании в определении переменной ( например , auto x = 11;), auto Ключевое слово указывает на вывод типа . Тип данных для этого x будет выведено из его инициализации. Тип возвращаемого значения функции также можно определить с помощью auto без указания конечного типа возвращаемого значения (например,
    auto CClass::HasMultipleItems() {
        return m_veciMember.size() > 1;
    }
    
    )
  • С другой стороны, в HasMultipleItems() пример из предыдущего раздела. В этом примере используется только auto ключевое слово как синтаксический элемент, поскольку используется завершающий тип возвращаемого значения.

Обоснование

[ редактировать ]

Рассмотрим задачу программирования обобщенной версии int Add(const int& lhs, const int& rhs) { return lhs + rhs; }. Правильное выражение типа возвращаемого значения этой функции будет использовать два формальных имени параметра с decltype : decltype(lhs + rhs). Но там, где тип возвращаемого значения традиционно указывается, эти два формальных параметра еще не входят в область действия. Следовательно, этот код не будет компилироваться:

// This will not compile
template<typename TL, typename TR>
decltype(lhs + rhs) Add(const TL& lhs, const TR& rhs) {
    return lhs + rhs;
}

Формальные параметры находятся в области видимости, где указан завершающий тип возвращаемого значения:

template<typename TL, typename TR>
auto Add(const TL& lhs, const TR& rhs) -> decltype(lhs + rhs) {
    return lhs + rhs;
}

См. также

[ редактировать ]
  1. ^ Страуструп, Бьярне (2013). Язык программирования C ++ (Четвертое изд.). Аддисон-Уэсли. ISBN  978-0-321-56384-2 .
  2. ^ «Объявление функции» . cppreference.com . Справочник по С++ . Проверено 1 марта 2021 г.
  3. ^ «Типы возврата суффикса C++0x» . cplusplus.com . Сеть ресурсов C++ . Проверено 1 марта 2021 г.
  4. ^ «Функции (C++)» . Microsoft C++, C и Ассемблер . Корпорация Майкрософт . Проверено 1 марта 2021 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 5aec7e499ba2d52ed4157be92a4a0f14__1701087480
URL1:https://arc.ask3.ru/arc/aa/5a/14/5aec7e499ba2d52ed4157be92a4a0f14.html
Заголовок, (Title) документа по адресу, URL1:
Trailing return type - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)