0

我希望将代码包含在基于编译时常量值的函数中,但 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 标准获得此保证,还是我受编译器供应商的摆布?

谢谢。

4

1 回答 1

3

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

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

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

    int a;
};

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

于 2017-10-30T11:49:21.547 回答