根据this question,不可能在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;
}
C ++编译器非常擅长优化,尤其是在constexpr
函数内部。初始化很可能会得到优化,并且不会产生任何额外费用,而且在您的情况下,这甚至没有关系,因为声明向量已经将其初始化为空向量。