Jump to content

Ранг (компьютерное программирование)

В компьютерном программировании ранг без каких-либо дополнительных спецификаций обычно является синонимом (или относится к) «количества измерений»; таким образом, двумерный массив имеет ранг два , трехмерный массив — третий и так далее. Строго говоря, невозможно дать формальное определение, применимое к каждому языку программирования , поскольку каждый из них имеет свои собственные концепции, семантику и терминологию; этот термин может даже быть неприменим или, наоборот, применяться с весьма конкретным значением в контексте данного языка.

В случае APL это понятие применимо к каждому операнду; а диады («бинарные функции») имеют левый и правый ранги .

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

#include <type_traits>
#include <cstddef>
 
/* Rank of a type
 * -------------
 *
 * Let the rank of a type T be the number of its dimensions if
 * it is an array; zero otherwise (which is the usual convention)
 */
template <typename T> struct rank
{
    static const std::size_t value = 0;
};

template<typename T, std::size_t N>
struct rank<T[N]>
{
    static const std::size_t value = 1 + rank<T>::value;
};

template <typename T>
constexpr auto rank_v = rank<T>::value;

/* Rank of an expression
 *
 * Let the rank of an expression be the rank of its type
 */

template <typename T>
using unqualified_t = std::remove_cv_t<std::remove_reference_t<T>>; 

template <typename T>
auto rankof(T&& expr)
{
    return rank_v<unqualified_t<T>>;
}

Учитывая код выше ранга типа T, его можно вычислить во время компиляции с помощью

rank<T>::value

или более короткая форма

rank_v<T>

Вычислить ранг выражения можно с помощью

rankof(expr)

См. также

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


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 378a47a5e747a0e04cc4ebd08521dd09__1589210700
URL1:https://arc.ask3.ru/arc/aa/37/09/378a47a5e747a0e04cc4ebd08521dd09.html
Заголовок, (Title) документа по адресу, URL1:
Rank (computer programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)