Согласно этому вопросу невозможно оставить переменные неинициализированными внутри функции 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;
}