初始化constexpr函数中的变量时的性能损失

问题描述 投票:0回答:1

根据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
1个回答
3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.