If 关于编译时常量值的语句

If statements on compile-time const value

我想将代码包含在基于编译时常量值的函数中,但 static_if 不是 C++ 中的构造。

所以我可以这样写函数

class TA {
public:
    template<bool flag>
    void func() {
        if(flag)
            a++;
    }

    int a;
};


int main() {
    TA a;
    a.func<true>();
    a.func<false>();
}

而且我想保证编译器生成两个函数。一种是 'if(flag) a++' 被编译到函数中,另一种不是。

是否有可能基于 C++17 标准获得此保证,还是我受制于编译器供应商的摆布?

谢谢。

事实上,C++17 确实包含了您所询问的内容 - 它被称为 if constexpr

您可以在任何可以在编译时评估条件的地方使用它(例如模板实例化):

class TA {
public:
    template<bool flag>
    void func() {
        if constexpr (flag)
            a++;
    }

    int a;
};

但是,正如其他人所说,在此示例中您不太可能获得太多收益,因为编译器通常可以像这样优化内容。