如果有关编译时const值

时间:2017-10-30 11:41:17

标签: c++ static-if

我希望基于编译时常量值将函数包含在函数中,但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>();
}

我想保证编译器有两个功能。一个如果(标记)a ++&#39;被编译成函数,而不是函数。

是否有可能基于C ++ 17标准获得此保证,或者我受编译器供应商的支配?

感谢。

1 个答案:

答案 0 :(得分:3)

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

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

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

    int a;
};

然而,正如其他人所说,在这个例子中,你不太可能获得太多收益,因为编译器经常可以优化这样的东西。