Pull to refresh
16
0

Пользователь

Send message

Отвечу сам себе. Да constexpr функция не обязательно вызывается во время компиляции. Её можно вызывать и во время выполнения. В случае если аргументы известны только в ран тайм, это удобно чтобы не писать две версии одной и той же функции.

Да, но я не до конца понял как работает constexpr. Вроде не обязательно всегда именно if constexpr писать, потому что это больше для замены enable_if и свинае ада. Но я проверил что действительно в моем примере вызовы заменяются на константу. Но в общем случае это уже на усмотрение компилятора, т.е. если я присваиваю constexpr value что то, то выражение справа вычислится во время компиляции. Но всегда ли constexpr функции во время компиляции считается?

Кстати на C++14 можно тоже без рекурсии через constexpr.


template <typename... Ts> class TypeList {
private:
  static constexpr auto no_index = std::numeric_limits<size_t>::max();

  template <typename T> static constexpr size_t getIndexImpl() {
    auto seq = {same<T, Ts>()...};
    size_t i = 0u;
    for (auto s : seq) {
      if (s) {
        return i;
      }
      i++;
    }
    return no_index;
  }
  template <typename U, typename V> static constexpr bool same() {
    return std::is_same<U, V>::value;
  }

public:
  template <typename T> static constexpr size_t getIndex() {
    constexpr bool found = getIndexImpl<T>() != no_index;
    static_assert(found, "Type T not found in TypeList");
    return getIndexImpl<T>();
  }
};

using ClassList = TypeList<C1, C2>;

static_assert(ClassList::getIndex<C1>() == 0, "Test failed");
static_assert(ClassList::getIndex<C2>() == 1, "Test failed");

Код: https://godbolt.org/z/FyR-Lw

Это квартальная проверка хабра. Заминусовали хорошо? Значит ещё торт.

Куда там мусорить в $HOME разницы нету. Надо бы уже вводить жесткое разделение прав для приложений.
Каждое приложение запускается в своей песочнице со своим uid/cgroups и видит три папки:


  • /app (r-o) библиотеки и ресурсы поставляемые вместе с приложением.
  • /system (r-o) системные библиотеки, утилиты и сокеты с которыми разрешено взаимодействовать приложению.
  • /config (r-w) то что можно по желанию сохранить после удаления приложения.
  • /cache (r-w) то что можно удалить в любой момент для экономии места.

Далее система должна предоставлять возможность добавлять доступ к пользовательским папкам типа ~/Documents ~/Pictures и так далее c выбором прав r-o или r-w. А не как в андроиде сразу весь Storage.
При удалении приложения менеджер пакетов должен вычищать соответствующий cache.
Вроде в серверном Линуксе похожие практики используются, а на десктопе уже не как на заре unix, кроме vi, awk и sed развелось ещё миллион больших приложений сомнительного качества. Умеет ли в такое snap/flatpack?

Просто во введении автор писал как он пользовался vim, потому что других IDE под Linux не было, хотя QtCreator и CLion существуют довально давно.

Не знаю как в с++ оно себя ведёт, но в питоне каждый раз ввел символ все варнинги убрались, потом через какое то время pylint отработал и опять разместил подчеркивания по файлу. Аналогично и с rust тоже прямо видно что все перезапускается после каждого нажатия. В PyCharm и idea-rust оно как то всё динамично добавляется убирается и так же в QtCreator в случае c++.

Почему нету сравнения с qtcreator? Пробовали ли его до vs code? Там парсер кода на основе clang, а как у vs code? В сложных выражениях с темплейтами умеет в авто дополнение?

Это matplotlib? А чтобы интерактивно варщать настоящие 3D графики есть вариант?

Но как уже писали выше, GNU libc компилируется GCC.

т.е. разрабы glibc, жертвуют нормально подсветкой синтакиса, оборачивают все аргументы в запасные скобочки, расставляют переносы строк через "\" потому что 30 лет назад не было inline?

Для меня любой макрос это сразу знак что жди сюрпризов. Стараюсь их вообще не использовать. В коде на си плюс плюс их практически не вижу. Большинство вопросов решается темплейтами. Чтобы сэкономить пару слов вводить макрос тоже смысла нету, а если и есть то они обычно пишутся капсом чтобы не спутать с названием функции, и опять же IDE все подсвечивает. Почему в glibc isspace определили как макрос хотя во всех доках это функция из int в int, и что за такты процессора они на этом экономят я искренне недоумеваю. Со спецификой си не знаком, видел один раз ООП на макросах в гномовской g-lib, сочувствую.

Хотя это с++ и там определено __NO_CTYPE в си действительно сплошные макросы повсюду.

У меня всё работает в qtcreator + clang-code-model.
Нету define:

Шланг умён и подсвечивает как функцию. Если интересно то Ctrl+Click я вижу из файла ctype.h:

Теперь сделаем что то плохое:

Ага явно видно макрос!

Не ужили ещё кто то пользуется IDE в которых макросы не выделяются другим цветом?
Upd: по традиции под статьёй единорога надо упомянуть про раст, там все макросы заканчиваются на "!".

Ютуб и Фейсбук банят все без разбора. Легче забанить чем потом по судам в разных странах тягаться. Все равно люди придут, а малый процент пользователей которые пострадают их не волнует. Только бизнес, никаких законов а тем более прав пользователей.

Sizeof это вообще те ещё грабли, смотрите на статьи от единорога. Вы видимо хорошо знаете си если у вас это не вызывает сложностей. Зачем если есть std::array?

Это не я придумал, было в одном из постов Herb Sutter. Ну а что зато похоже на rust:


let a = A::new();

Перепутал с malloc и free. Но смысл тот же, без std::vector не удобно.

Information

Rating
5,030-th
Registered
Activity