Потеря производительности при инициализации переменных в функциях constexpr - PullRequest
0 голосов
/ 26 апреля 2020

Согласно этому вопросу невозможно оставить переменные неинициализированными внутри функции constexpr. Иногда из соображений производительности мы не хотим инициализировать переменные. Можно ли как-то «перегрузить» функцию, чтобы она допускала версию constexpr и более высокопроизводительную не constexpr функцию?

В качестве примера рассмотрим следующую функцию add в пользовательский класс vec:

auto add(vec that) const {
    vec ret; 
    for (int i = 0; i < n; i++)
        ret[i] = (*this)[i] + that[i];
    return ret;
}
constexpr auto add(vec that) const {
    vec ret = {}; 
    for (int i = 0; i < n; i++)
        ret[i] = (*this)[i] + that[i];
    return ret;
}

1 Ответ

3 голосов
/ 26 апреля 2020

Компилятор C ++ очень хорош в оптимизации, особенно внутри constexpr функций. Скорее всего, инициализация будет оптимизирована и не потребует дополнительных затрат, и в вашем случае это даже не имеет значения, поскольку объявление вектора уже инициализирует его пустым вектором.

...