как проверить, что члены массива const монотонно растут во время компиляции
Фантастический ответ уже c++ дан. Просто как дополнительное constexpr примечание:
Начиная с C++20, некоторые cxx функции в библиотеке алгоритмов cxx теперь также имеют реализацию cpp constexpr
. Сюда входят std::adjacent_find
. И это тоже constexpr-function в версии "ranges".
Решение cxx вашей проблемы почти дано cpp в справочнике cpp here с использованием constexpr std::ranges::adjacent_find
.
В примере используется std::ranges::greater
в c++ качестве предиката, который cpp позволяет повторять значения, что constexpr-function приводит к нестрогому порядку.
Итак, нам c++ нужно использовать std::ranges::greater_equal. Это c++ также автоматически выведет c++ типы параметров оператора constexpr вызова функции из аргументов, что constexpr-function немного упростит жизнь.
Код c++ может выглядеть примерно cpp так:
#include
#include
#include
#include
#include
namespace rng = std::ranges;
template
constexpr bool increasingValues(T(&a)[N]) noexcept {
return (rng::end(a) == rng::adjacent_find(a, rng::greater_equal()));
}
constexpr int arr[] = { 10, 20, 20, 40, 50};
static_assert(increasingValues(arr), "Array values are not increasing");
int main() {
std::cout << *(std::end(arr) - 1)<< '\n';
}
В Microsoft Visual Studio constexpr-function редактор уже показал бы проблему.
И c++ компилятор выдаст 2 сообщения constexpr-function с понятной подсказкой.
См. снимок c++ экрана ниже:
.
.
.
Кстати, принятый cxx ответ компилируется, как constexpr показано ниже
А с фиксацией cxx на constexpr
мы видим:
c++
constexpr
constexpr-function
как проверить, что члены массива const монотонно растут во время компиляции
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.